您能告訴我如何顯式調用模板構造函數(在初始化列表中)嗎?例如:struct T { template<class> T();};struct U { U() : t<void>() {} //does not work T t;};謝謝
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
這是不可能的。該標準對此也有注釋14.8.1/7
[注意:因為顯式模板參數列表緊隨功能模板名稱,并且由于在不使用函數名稱的情況下調用轉換成員函數模板和構造函數成員函數模板,所以無法為這些功能模板提供顯式模板參數列表。]
說明:這說:模板參數在函數模板名稱(例如)之后的尖括號中傳遞std::make_pair<int, bool>。構造函數沒有自己的名稱,但是會在各種上下文中濫用其類名稱(因此,U<int>()意味著:傳遞<int>給類模板U,并通過調用不帶參數的默認構造函數來構造對象)。因此,不能將模板參數傳遞給構造函數。
在您的情況下,您嘗試在成員初始化程序中傳遞模板參數。在這種情況下,還有更多的問題:它將嘗試將其解析和解釋t<void>為基類類型,并認為您想調用基類的默認構造函數。當然,這將失敗。
如果可以忍受,可以解決它
struct T {
template<class U> T(identity<U>);
};
struct U {
U() : t(identity<void>()) {}
T t;
};
由于identity喜歡它的升壓轉換器的定義
template<typename T> struct identity { typedef T type; };
- 1 回答
- 0 關注
- 571 瀏覽
添加回答
舉報
0/150
提交
取消