在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中文網其他相關文章!