亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問C ++調用顯式模板構造函數

請問C ++調用顯式模板構造函數

C++
慕的地6264312 2019-11-03 08:04:58
您能告訴我如何顯式調用模板構造函數(在初始化列表中)嗎?例如:struct T {     template<class> T();};struct U {    U() : t<void>() {} //does not work    T t;};謝謝
查看完整描述

1 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

這是不可能的。該標準對此也有注釋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; };



查看完整回答
反對 回復 2019-11-04
  • 1 回答
  • 0 關注
  • 321 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號