繁体   English   中英

C++17 指向带有类模板默认参数的模板类的指针

[英]C++17 pointer to tempalte class with class template default argument

我正在试验 C++17 类模板默认参数,想知道是否有人可以解释:

如果我有以下情况:

template<typename Policy = DefaultPolicy>
class MyClass { //class goes here };

然后尝试将其用作:

MyClass * class = new MyClass();

我得到错误:

但是以下两个编译都可以:

MyClass stackClass = MyClass();

auto * heapClass = new MyClass();

特别是我对 auto 在上面的工作方式非常感兴趣。 非常感谢!

也许还有一个概念名称来描述这一点,我也可以在谷歌上搜索更多信息。

工作示例: https ://godbolt.org/z/EbEnxjcej

形成指向具有默认参数的模板实例的指针的正确语法是:

MyClass<> * heapClass = new MyClass();  
auto smartClass = std::make_unique<MyClass<>>(); // for same reason

MyClass正式不是类型标识,而是模板名称。 这就是make_unique会失败的原因,因为它的参数应该是typename 指针声明语法需要相同。 auto所做的是使用完整的类型 ID - MyClass<DefaultPolicy> 新表达式是 C++17 中允许的特殊情况之一,与MyClass stackClass一起,尽管为了清楚起见new MyClass<>()可以用作 17 之前的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM