模板转换操作符C ++

时间:2013-06-18 02:20:13

标签: c++ casting operator-overloading

我正在尝试创建一个小包装类,例如

template <typename T>
class EdgeTriggeredState

{

public:
    void Tick()
    {
        oldData = newData;
    }

    EdgeTriggeredState& operator =(const T& v)
    {
        newData = v;
        return *this;
    }

//  T& operator = (void)
//  {
//      return oldData;
//  }

//  T& operator T()
//  {
//      return oldData;
//  }

private:
    T oldData;
    T newData;
};

基本上我希望能够直接为类包装的值赋值为T的变量。我已经尝试实现了一个赋值(到类型T)操作符和一个强制转换操作符来输入T.我在C ++上有点生疏,因为我一直在C中工作。有没有办法实现这个而不创建一个命名为getter方法?

当我取消注释第一次实现尝试时,我收到错误

  

&#34; ../ EdgeTriggeredState.h:19:21:错误:'T&amp; EdgeTriggeredState :: operator =()'必须只接受一个参数&#34;

当我取消注释第二个实现(并注释掉第一个实现)时,我收到错误:

  

&#34; ../ EdgeTriggeredState.h:24:16:错误:为'运营商T'指定的返回类型&#34;

1 个答案:

答案 0 :(得分:10)

当您编写operator T时,返回类型是隐式的,因此您的代码应如下所示:

template <typename T>
class DumbWrapper {
    T oldData;
    T newData;
public:
    DumbWrapper& operator = (const T& val) {
        newData = val;
        return *this;
    }

    operator T() {
        return oldData;
    }
};

[另请注意结尾处的分号,以及构造函数和转换运算符可能意图公开的事实。]