C ++模板赋值运算符重载 - 将原始类型分配给对象?

时间:2013-05-29 15:58:28

标签: c++ templates

在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 ++实现吗?

1 个答案:

答案 0 :(得分:5)

你遇到过“令人烦恼的解析”。 Variable<int> intVar();声明一个函数,而不是一个对象;错误消息中类型规范末尾的()表示函数类型。

您希望Variable<int> intVar;声明并默认初始化对象。

如果您需要价值初始化而不是默认初始化,那么您的选择是:

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