我正在尝试创建一个小包装类,例如
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;
答案 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;
}
};
[另请注意结尾处的分号,以及构造函数和转换运算符可能意图公开的事实。]