如果允许我执行以下操作:
template <typename T = int>
class Foo{
};为什么不允许我在main中执行以下操作?
Foo me;但我必须指明以下几点:
Foo<int> me;C++11引入了默认的模板参数,现在我还不能完全理解它们。
发布于 2013-03-13 06:53:23
备注:
从C++17开始,不带模板参数的Foo me;是合法的。请参阅此答案:https://stackoverflow.com/a/50970942/539997。
适用于C++17之前的原始答案:
你需要做的是:
Foo<> me;模板参数必须存在,但您可以将其保留为空。
可以把它想象成一个只有一个默认参数的函数foo。表达式foo不会调用它,但foo()会调用它。参数语法必须仍然存在。这和那是一致的。
发布于 2018-06-21 22:26:01
使用C++17,您确实可以。
这个特性称为class template argument deduction,它为声明模板化类型的变量增加了更多的灵活性。
所以,
template <typename T = int>
class Foo{};
int main() {
Foo f;
}现在是legal C++ code。
发布于 2015-11-18 18:34:28
你不允许这样做,但你可以这样做
typedef Foo<> Fooo;然后做
Fooo me;https://stackoverflow.com/questions/15373823
复制相似问题