[英]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.