ファンクタースタイルの述語の代わりに静的メンバー関数でテンプレートパラメーターを使用する場合、パフォーマンス上の利点はありますか?
たとえば、ファンクタースタイルのソートインターフェイスは通常、次のようなものです。
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()...
}
理論的には、最初のケースはヒープ上に一時的なファンクターオブジェクトを動的に作成する可能性がありますが、2番目のケースはコンパイル時に完全に評価されると思います。(たとえば)gccやmsvcは最適化に優れていることを理解していますが、最初のケースではこれを同じ程度に行うことができますか?
また、私はSTLソートルーチンなどを書き直そうとはしていません。より一般的なファンクターの質問の例にすぎません...