我试图做一些包装类,如

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方法?

当我取消对第一次实现尝试的注释时,我得到了错误



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

最佳答案

当您编写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;
    }
};

[还请注意最后的分号,以及构造函数和转换运算符可能打算公开的事实。]

10-08 11:24