2013-05-29 111 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

没有参数,只是说我不确定是什么原因导致了特定编译器的特定错误 - 它可能是相关的,因为它也会使该特定分配的变量无效。如果我们得到了具体的错误信息,会有帮助。 –