190

私が次のことを許可されている場合:

template <typename T = int>
class Foo{
};

なぜ私は主に次のことをすることが許されないのですか?

Foo me;

ただし、次のように指定する必要があります。

Foo<int> me;

C ++ 11はデフォルトのテンプレート引数を導入しましたが、現在、それらは私の完全な理解にはとらえどころのないものです。

4

5 に答える 5

235

ノート:

Foo me;テンプレート引数なしは、C++17 以降有効です。この回答を参照してください: https://stackoverflow.com/a/50970942/539997

C ++ 17より前に適用可能な元の回答:

あなたがしなければなりません:

Foo<> me;

テンプレート引数が存在する必要がありますが、空のままにすることができます。

foo単一のデフォルト引数を持つ関数のように考えてください。式fooはそれを呼び出しませんが、呼び出しますfoo()。引数の構文はまだそこにある必要があります。これはそれと一致しています。

于 2013-03-12T22:53:22.867 に答える
29

あなたはそれをすることは許されていませんが、あなたはこれを行うことができます

typedef Foo<> Fooo;

そして、する

Fooo me;
于 2015-11-18T10:34:28.473 に答える
21

以下を使用できます。

Foo<> me;

そしてint、あなたのテンプレートの議論になりなさい。山かっこは必要であり、省略できません。

于 2013-03-12T22:53:29.503 に答える