Answers:
你所要做的:
Foo<> me;
模板参数必须存在,但您可以将其保留为空。
可以将其视为foo
具有单个默认参数的函数。该表达式foo
不会调用它,但是foo()
会调用它。参数语法必须仍然存在。与此相符。
foo
;您可以命名一个没有参数的类Foo
。
<>
在这种情况下不再需要。查看我的答案以获取更多详细信息。
使用C ++ 17,您确实可以。
此功能称为类模板参数推导,它为声明模板化类型的变量的方式增加了灵活性。
所以,
template <typename T = int>
class Foo{};
int main() {
Foo f;
}
现在是合法的C ++代码。
您不可以这样做,但是您可以这样做
typedef Foo<> Fooo;
然后做
Fooo me;
typedef Foo<float> Fooo;
,没有默认类型有什么区别吗?
using Fooo = Foo<>;
您可以使用以下内容:
Foo<> me;
并int
成为您的模板参数。尖括号是必要的,不能省略。
Foo
可能是模板标识符或可能是显式实例化(取决于是否有默认参数)。最好保留显式实例化语法。可以将其视为foo
具有单个默认参数的函数。您不能像那样称呼它foo
,而要用来称呼它foo()
。保持一致是有意义的。