首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为类特定类型防御(c++17)启用自动类型推断?

如何为类特定类型防御(c++17)启用自动类型推断?
EN

Stack Overflow用户
提问于 2021-06-07 10:55:30
回答 2查看 65关注 0票数 2

我想用c++17自动推断一个类‘(带有默认的模板参数)。有人知道这是否可能吗?以下代码试图说明这一点:

代码语言:javascript
复制
#include <vector>
template <typename T = int>
struct A{
    using Vec = std::vector<T>;
};

int main() {
    A a{}; // works with c++ 17
    A<int>::Vec vec2{}; //works
    A::Vec vec{}; //does not seem to work with c++ 17. Is that possible somehow?
}

在上面的代码中,a是在没有问题的情况下实例化的,推导出的模板类型在默认情况下是int。尽管如此,我必须传递参数类型才能使用typedef Vec。如果有人知道以下两个问题的答案,我将不胜感激:

  • 国际标准化组织邮件列表的纸张编号/标题是什么?该功能允许A a{}自动类型扣减?我很想了解更多关于这个特性的信息。
  • 可以不显式地指定Vec的模板类型而自动推断A的类型吗?

我很感谢你的暗示和建议!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-07 11:00:07

是否可以在不显式指定模板类型的情况下自动推断Vec的类型?

是。您可以将<>保留为空:

代码语言:javascript
复制
A<>::Vec vec{};

否则,没有A<><int>等的模板将命名为具有未知模板类型参数的模板,您不能使用该参数访问嵌套标识符。

ISO邮件列表的纸张编号/标题是什么?允许a{}自动类型扣减?我很想了解更多关于这个特性的信息。

P1814是关于类模板参数推导(CTAD)的主要论文。这里是cpprefernece上的页面。请注意,A<>::Vec vec{}不依赖CTAD,因为不涉及执行实际演绎的构造函数。

票数 3
EN

Stack Overflow用户

发布于 2021-06-07 10:59:43

是否可以在不显式指定模板类型的情况下自动推断Vec的类型?

是:

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

https://stackoverflow.com/questions/67870327

复制
相关文章

相似问题

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