次のことが許可されている場合:
template <typename T = int>
class Foo{
};
メインで次のことができないのはなぜですか?
Foo me;
ただし、以下を指定する必要があります。
Foo<int> me;
C++ 11はデフォルトのテンプレート引数を導入しましたが、現時点では完全に理解することはできません。
あなたはしなければならない:
Foo<> me;
テンプレート引数は存在する必要がありますが、空のままにしておくことができます。
単一のデフォルト引数を持つ関数foo
のように考えてください。式foo
は呼び出しませんが、foo()
は呼び出します。引数の構文はまだそこになければなりません。これはそれと一致しています。
C++ 17を使用すると、実際にできます。
この機能は class template argument deduction と呼ばれ、templated typesの変数を宣言できる方法に柔軟性を追加します。
そう、
template <typename T = int>
class Foo{};
int main() {
Foo f;
}
現在は 法的C++コード です。
以下を使用できます。
Foo<> me;
そして、int
をテンプレート引数にします。 angularブラケットは必須であり、省略できません。
あなたはそれを行うことはできませんが、あなたはこれを行うことができます
typedef Foo<> Fooo;
してから
Fooo me;