[解決済み] 関数テンプレートのデフォルトのテンプレート引数
2022-04-13 16:54:02
質問
なぜデフォルトのテンプレート引数は、クラステンプレートにしか許されないのですか? なぜ、メンバー関数テンプレートではデフォルトの型を定義できないのですか? 例えば
struct mycclass {
template<class T=int>
void mymember(T* vec) {
// ...
}
};
その代わり、C++ではデフォルトのテンプレート引数はクラステンプレート上でしか許されないことを強制しています。
解決方法は?
デフォルトのテンプレート引数を与えることは理にかなっています。例えば、ソート関数を作ることができます。
template<typename Iterator,
typename Comp = std::less<
typename std::iterator_traits<Iterator>::value_type> >
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
...
}
C++0xではC++に導入されています。Bjarne Stroustrup氏によるこの不具合報告を参照してください。 関数テンプレートのデフォルトのテンプレート引数 とのことです。
関数テンプレートのデフォルトテンプレート引数の禁止は、独立した関数が二流市民として扱われ、すべてのテンプレート引数を指定するのではなく、関数引数から推測する必要があった時代の忘れられた名残である。
この制限により、自立型関数とメンバ関数を不必要に区別することになり、STLスタイルのコードを書きにくくなるため、プログラミングスタイルが著しく損なわれます。
関連
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] C++テンプレート関数定義の.CPPファイルへの格納
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】C++のストリームマニピュレータで固定幅のフィールドのテキストを中央揃えにする
-
[解決済み] std::enable_if によるメンバ関数の条件付きコンパイル
-
[解決済み】古典的なソートアルゴリズムを最新のC++で実装する方法とは?