私が次のことを許可されている場合:
template <typename T = int>
class Foo{
};
なぜ私は主に次のことをすることが許されないのですか?
Foo me;
ただし、次のように指定する必要があります。
Foo<int> me;
C ++ 11はデフォルトのテンプレート引数を導入しましたが、現在、それらは私の完全な理解にはとらえどころのないものです。
ノート:
Foo me;
テンプレート引数なしは、C++17 以降有効です。この回答を参照してください: https://stackoverflow.com/a/50970942/539997。
C ++ 17より前に適用可能な元の回答:
あなたがしなければなりません:
Foo<> me;
テンプレート引数が存在する必要がありますが、空のままにすることができます。
foo
単一のデフォルト引数を持つ関数のように考えてください。式foo
はそれを呼び出しませんが、呼び出しますfoo()
。引数の構文はまだそこにある必要があります。これはそれと一致しています。
あなたはそれをすることは許されていませんが、あなたはこれを行うことができます
typedef Foo<> Fooo;
そして、する
Fooo me;
以下を使用できます。
Foo<> me;
そしてint
、あなたのテンプレートの議論になりなさい。山かっこは必要であり、省略できません。