【问题标题】:Template cast operator C++模板转换运算符 C++
【发布时间】:2013-06-18 02:20:12
【问题描述】:

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

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: error: return type specified for ‘operator T’"

【问题讨论】:

  • 有什么问题?您之前尝试过的内容是否有任何错误?如果是这样,错误是什么?另外,能否请您发布您的演员操作员的实际代码?

标签: c++ casting operator-overloading


【解决方案1】:

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

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

【讨论】:

  • 您的赋值运算符缺少返回值(也是,+1)。
  • 谢谢这是我问得太早并且没有足够注意错误消息的情况。在为问题添加更多细节时,我想通了。谢谢。
  • @JaminGrey:哎呀——在复制问题之前没有仔细观察。谢谢。
  • 是的,我通过的临时代码实际上不是我的问题代码,其中有一些实际代码中没有的错误。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多