例如,使用函数对象排序接口通常会像这样实现:
template <typename _Type, typename _Pred>
void sort (
RandomAccessIterator first,
RandomAccessIterator last ,
_Pred less_than
)
{
// actual sorting code here, calling less_than()...
}
您可以像这样做一些事情,并要求
_Pred
包含静态成员函数_Pred ::less_than
:template <typename _Type, typename _Pred>
void sort (
RandomAccessIterator first,
RandomAccessIterator last
)
{
// actual sorting code here, calling _Pred::less_than()...
}
理论上,第一种情况可能会在堆上动态创建一个临时函数对象,而我认为第二种情况是在编译时完全评估的。我知道(比如)gcc和/或msvc很擅长优化,但在第一种情况下是否可以做到同样的程度?
另外,我并不打算重写STL排序例程或类似的东西,只是一个更一般的函数对象问题的例子...