4

C++ Programming Languageの第 3 版の第 13 章で、Stroustrup が関数テンプレートのデフォルト パラメータを示している理由を説明できますか? これは、セクション 13.4.1 で Stroustrup が示した例です。

呼び出しごとに比較を明示的に指定するのは面倒です。幸いなことに、一般的でない比較基準のみを明示的に指定する必要があるように、デフォルトを選択するのは簡単です。これは、オーバーロードによって実装できます。

template<class T, class C>
int compare(const String<T>& str1, const String<T>& str2); // compare using C
template<class T>
int compare(const String<T>& str1, const String<T>& str2); // compare using Cmp<T>

または、デフォルトのテンプレート引数として通常の規則を指定できます。

template <class T, class C = Cmp<T> >
int compare(const String<T>& str1, const String<T>& str2)

これはコンパイラエラーです:

エラー: デフォルトのテンプレート引数は関数テンプレートで使用できない可能性があります

4

1 に答える 1

9

著者自身が彼のウェブサイトでこれを説明しています:

不幸な見落としにより、標準では、関数テンプレートのテンプレート パラメーターの既定の引数を単純に禁止しています。次の標準で修正するために投票しました。

于 2011-10-24T20:30:51.723 に答える