2

私のコードでは、正確な動作を関数オブジェクトによってカスタマイズできるという点で、いくつかの標準ライブラリアルゴリズムに似た設計戦略を採用しています。最も単純な例はstd::sortで、関数オブジェクトはオブジェクト間の比較方法を制御できます。

VisualC++がstd::sortの2つの実装を提供していることに気付きました。これには、当然、コードの重複が含まれます。代わりに、実装を1つだけにして、デフォルトのテンプレートパラメーターとしてデフォルトのコンパレーター(operator <を使用)を提供することが可能であると想像していました。

2つの別々のバージョンの背後にある理由は何ですか?私の提案は、何らかの方法でインターフェースをより複雑にするでしょうか?または、オブジェクトが演算子を提供しない場合、混乱するエラーメッセージが表示されます<?それともうまくいかないのでしょうか?

ありがとう、

デビッド

4

2 に答える 2

12

関数テンプレートは、標準でデフォルトの型引数を持つことが許可されていないためです。

ただし、これはC ++ 11で修正され、関数テンプレートでデフォルトの型引数を使用できるようになりました。

于 2012-06-29T15:13:16.293 に答える
2

C ++ 11より前は、関数テンプレートにデフォルトのテンプレート引数を設定できず、デフォルトの関数引数からテンプレート引数を推定できないため、これを機能させる方法はありませんでした。

関数テンプレートのデフォルトのテンプレート引数をサポートするC++11では、単一の関数テンプレートを使用できますが、これを変更すると、特定のタイプの関数に依存する古いC++コードとの下位互換性が失われます。

于 2012-06-29T15:16:00.597 に答える