Есть ли какое-либо преимущество в производительности при использовании параметров шаблона со статическими функциями-членами вместо предикатов в стиле функтора?
Например, интерфейс сортировки в стиле функтора обычно выглядит примерно так:
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 или что-то в этом роде, просто пример для более общего вопроса о функторах ...