2

我正在尝试制作一个小包装类,例如

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

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

“../EdgeTriggeredState.h:19:21: 错误:'T& EdgeTriggeredState::operator=()' 必须只采用一个参数”

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

“../EdgeTriggeredState.h:24:16:错误:为‘operator T’指定的返回类型”

4

1 回答 1

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;
    }
};

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

于 2013-06-18T02:29:35.657 回答