如果我被允许执行以下操作:
template <typename T = int>
class Foo{
};
为什么我不允许在main中执行以下操作?
Foo me;
但我必须指明以下内容:
Foo<int> me;
C ++ 11引入了默认模板参数,现在它们对我完全理解是难以理解的。
答案 0 :(得分:151)
你必须这样做:
Foo<> me;
模板参数必须存在,但您可以将它们留空。
将其视为具有单个默认参数的函数foo
。表达式foo
不会调用它,但foo()
将会调用它。参数语法必须仍然存在。这与此一致。
答案 1 :(得分:31)
使用C ++ 17,您确实可以。
此功能称为class template argument deduction,为声明模板类型的变量的方式增加了灵活性。
所以
template <typename T = int>
class Foo{};
int main() {
Foo f;
}
现在为legal C++ code。
答案 2 :(得分:18)
您可以使用以下内容:
Foo<> me;
让int
成为您的模板参数。角括号是必要的,不能省略。
答案 3 :(得分:17)
你不能这样做,但你可以这样做
typedef Foo<> Fooo;
然后再做
Fooo me;