首頁 > 後端開發 > C++ > 為什麼我無法明確地呼叫 C 初始化程序列表中的模板構造函數?

為什麼我無法明確地呼叫 C 初始化程序列表中的模板構造函數?

Mary-Kate Olsen
發布: 2024-11-29 15:12:11
原創
1056 人瀏覽過

Why Can't I Explicitly Invoke Template Constructors in C   Initializer Lists?

在初始值設定項清單中明確呼叫模板建構子

在C 中,不可能在初始值設定項清單中明確呼叫模板構造函數。考慮以下範例:

struct T { 
    template<class> T();
};

struct U {
    U() : t<void>() {} //does not work
    T t;
};
登入後複製

此程式碼將無法編譯,因為 C 標準明確不允許建構函式成員函式範本明確模板參數清單。這是由於建構函數的獨特語法造成的,它沒有函數名稱。

說明: C 標準第 14.8.1/7 節規定:

「因為明確模板實參列表跟在函數模板名稱後面,並且因為轉換成員函數模板和構造函數成員函數模板是在不使用函數名的情況下調用的,所以沒有辦法提供明確模板實參列表。這些函數範本的範本參數清單。如果需要在初始值設定項列表中明確調用模板建構函數,則可以使用帶有建構函數的自訂類型來採用解決方法接受模板參數作為參數:

在這種情況下,來自Boost 函式庫的識別類型或來自C 的std::type_identity 20可以用來表示模板參數類型。這允許使用此自訂類型的物件間接呼叫模板建構函數。

以上是為什麼我無法明確地呼叫 C 初始化程序列表中的模板構造函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板