2013-05-29 142 views
2

是否有可能在C++中將對象的賦值運算符重載爲接受原始類型?C++模板賦值運算符重載 - 將基元類型賦值給對象?

例如

template< typename T> 
    class Variable 
    { 
    ... 
    Variable<T>& operator=(const Variable<T>&) 
    { 
     mValue = 0; 
     return &this; 
    } 
    } 

    int l = 3; 
    Variable<int> intVar(); 
    intVar = l; 

如果我嘗試這樣做,我收到以下錯誤

error: non-object type 'Variable<int>()' is not assignable 

我覺得如果我失去了一些東西很明顯 - 我儘管這是可能的C++?

+0

我還要補充,如果我改變賦值操作符可變運算符=(const的牛逼VAL)也失敗 – bgoldber

回答

5

您遇到了「令人煩惱的解析」。 Variable<int> intVar();聲明一個函數,而不是一個對象;錯誤消息中類型說明末尾的()表示函數類型。

您希望Variable<int> intVar;聲明和默認初始化一個對象。

如果你需要的價值初始化,而不是默認初始化,然後你的選擇是:

Variable<int> intVar{};     // C++11 or later 
Variable<int> intVar = Variable<int>(); // Historic dialects 
+0

還值得注意的是,此修復程序仍然不會使分配工作,因爲在當前代碼中沒有從'int'到'Variable '的轉換路徑。 –

+1

@NielsKeurentjes:我假設(與「公共」說明符一起)在部分被刪除爲「...」。這只是對報告錯誤的解釋。 –

+0

沒有參數,只是說我不確定是什麼原因導致了特定編譯器的特定錯誤 - 它可能是相關的,因爲它也會使該特定分配的變量無效。如果我們得到了具體的錯誤信息,會有幫助。 –