首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板默认参数

问模板默认参数
EN

Stack Overflow用户
提问于 2013-03-13 06:52:50
回答 5查看 91.8K关注 0票数 185

如果允许我执行以下操作:

代码语言:javascript
复制
template <typename T = int>
class Foo{
};

为什么不允许我在main中执行以下操作?

代码语言:javascript
复制
Foo me;

但我必须指明以下几点:

代码语言:javascript
复制
Foo<int> me;

C++11引入了默认的模板参数,现在我还不能完全理解它们。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-13 06:53:23

备注:

从C++17开始,不带模板参数的Foo me;是合法的。请参阅此答案:https://stackoverflow.com/a/50970942/539997。

适用于C++17之前的原始答案:

你需要做的是:

代码语言:javascript
复制
Foo<> me;

模板参数必须存在,但您可以将其保留为空。

可以把它想象成一个只有一个默认参数的函数foo。表达式foo不会调用它,但foo()会调用它。参数语法必须仍然存在。这和那是一致的。

票数 230
EN

Stack Overflow用户

发布于 2018-06-21 22:26:01

使用C++17,您确实可以。

这个特性称为class template argument deduction,它为声明模板化类型的变量增加了更多的灵活性。

所以,

代码语言:javascript
复制
template <typename T = int>
class Foo{};

int main() {
    Foo f;
}

现在是legal C++ code。

票数 96
EN

Stack Overflow用户

发布于 2015-11-18 18:34:28

你不允许这样做,但你可以这样做

代码语言:javascript
复制
typedef Foo<> Fooo;

然后做

代码语言:javascript
复制
Fooo me;
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15373823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档