簡體   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