C ++泛型rvalue重载

时间:2016-09-28 09:07:50

标签: c++ operator-overloading rvalue

我目前正在尝试将一些使用原始类型的代码重构为可以将setter和getter包含在其中的东西。我想让对底层代码的修改变得透明,起初我虽然C ++的运算符重载会帮助我。

假设我想制作一个"增强int"例如,类型可以像常规int一样处理,但允许在我分配给它的任何地方进行进一步操作,只允许分配 - int的所有其他属性,例如添加{ {1}},应该保留。

首先,我首先考虑到如果我将+=封装在某个结构中,并填写了int重载,我将被设置,如下例所示:

operator=

代码按预期编译并运行,但是一旦我尝试使用常规int可以执行其他操作,例如#include<iostream> typedef struct PowerInt{ int x; PowerInt(){ cout << "PowerInt created\n"; x = 0; } ~PowerInt(){ cout << "PowerInt destroyed\n"; } void operator=(int other){ cout << "PowerInt received " << other << "\n"; this->x = other; } }PowerInt; int main(){ PowerInt a; a = 3; return 0; } cout << a,或者甚至是简单的a += 2赋值编译器抱怨缺少运算符int b = a;<<

足够公平;然后我,至少对+=和&#34;分配<<&#34;,我可以使用某种&#34;通用右值运算符&#34;或者某些在=被用作右值的任何地方返回PowerInt.x的方法,自动使aint c = (a + 3);等表达式有效。

问题是,我无法找到实现这个习惯用法的方法,这很可能与我对C ++中运算符重载如何工作的一点理解有关,或者某些语言​​特征我不是但意识到。是否有可能完成我在这里尝试的事情?

1 个答案:

答案 0 :(得分:0)

如果您希望operator int() const { return x; } 可转换为正常PowerInt,则可以创建用户定义的转换运算符:

int

任何未为typedef struct定义的运算符都将使用为正常UPDATE table_name SET A = B, B = A; 定义的运算符。

P.S {+ 1}}在C ++中是不必要的。