1. ホーム
  2. c++

[解決済み] テンプレートのデフォルト引数

2022-04-13 11:26:30

質問

以下のようなことが許される場合。

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

なぜmainで以下のことをしてはいけないのでしょうか?

Foo me;

しかし、次のように指定しなければなりません。

Foo<int> me;

C++11では、デフォルトのテンプレート引数が導入されましたが、今のところ、私の完全な理解には至っていません。

どうすればいい?

注意事項

Foo me; テンプレート引数なしはC++17から合法になりました。 この回答を参照してください。 https://stackoverflow.com/a/50970942/539997 .

C++17より前に適用されるオリジナルの回答です。

しなければならない。

Foo<> me;

テンプレート引数は必ず指定する必要がありますが、空白でもかまいません。

関数のように考えてください foo をデフォルトの引数として1つ持つ。この式は foo は呼び出さないが foo() となります。引数の構文が残っているはずです。これはそれと矛盾しない。