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

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

為什么不從構造函數推斷模板參數?

為什么不從構造函數推斷模板參數?

C++
慕容3067478 2019-10-17 14:16:09
我今天的問題很簡單:為什么編譯器無法像從函數參數中那樣從類構造函數中推斷模板參數?例如,為什么以下代碼無效:template<typename obj>class Variable {      obj data;      public: Variable(obj d)              {                   data = d;              }};int main(){    int num = 2;    Variable var(num); //would be equivalent to Variable<int> var(num),    return 0;          //but actually a compile error}正如我所說,我知道這是無效的,所以我的問題是為什么呢?允許這樣做會造成任何重大的語法漏洞嗎?是否存在一個實例,該實例不希望使用此功能(推斷類型會導致問題)?我只是想了解允許對函數進行模板推斷的邏輯,而對于適當構造的類則不是。
查看完整描述

3 回答

?
阿波羅的戰車

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

由于其他人已解決的原因,您無法執行所要求的操作,但是您可以執行以下操作:


template<typename T>

class Variable {

    public: Variable(T d) {}

};

template<typename T>

Variable<T> make_variable(T instance) {

  return Variable<T>(instance);

}

出于所有目的和目的,這都是您要的。如果您喜歡封裝,可以將make_variable設為靜態成員函數。這就是人們所說的命名構造函數。因此,它不僅可以滿足您的要求,而且幾乎可以滿足您的要求:編譯器從(命名的)構造函數中推斷出模板參數。


注意:任何合理的編譯器在編寫類似以下內容時都會優化掉臨時對象


Variable<T> v = make_variable(instance);


查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 444 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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