当使用带有静态成员函数而不是仿函数样式谓词的模板参数时,是否有任何性能优势?
例如,仿函数风格的排序接口通常是这样的:
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 排序例程或类似的东西,只是一个更一般的仿函数问题的例子......