5

標準ライブラリは、汎用アルゴリズムの述語バージョンと非述語バージョンを区別します。例えば、std::sort()は、次のようになります。なぜ汎用アルゴリズムのために述語バージョンと非述語バージョンを区別するのですか?

template< class RandomIt > 
void sort(RandomIt first, RandomIt last); 

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

はただ次のことを書くのいずれかの問題がありますか?

template< class RandomIt, class Compare = std::less<void>> 
void sort(RandomIt first, RandomIt last, Compare comp = Compare{}); 
+11

C++ 03では、関数テンプレートのデフォルトのテンプレート引数はありませんでした。 –

+0

@ T.C。それで、2番目のフォームが優先されるべきであるならば、すべてを再設計するとしますか? – Lingxi

+0

@ T.C。私はデフォルトのテンプレート引数の事実は答えだと思う。 – Angew

答えて

8

かなり歴史的な理由があります。

C++ 98/03には、関数テンプレートのデフォルトのテンプレート引数がないため、2つのオーバーロードを使用する必要がありました。後でそれを変更すると、ユーザーコードが破損する可能性があります。

だから、私達はちょうど全体を再設計するとし、第二の形式 が好ましいすべきか?

これは、current Ranges TS working draftの機能です。

関連する問題