说我有一个相当复杂的结构:
struct Wrapper {
int value;
};
我可以为结构重载运算符:
Wrapper operator+(const Wrapper &w1, const Wrapper &w2) {
Wrapper tmp;
tmp.value = w1.value + w2.value;
return tmp;
}
很明显,我可以用类似的方式分别重载其他运算符(-
,*
,/
...)。但是,如果我们重复相似的代码,它将变得复杂并容易出错。
根据我在C中的经验,可能会将宏用于此类任务,但似乎不推荐在C ++中使用宏。
那么有没有比这更好的方法来重载多个运营商,一次性?
答案 0 :(得分:2)
不幸的是,元编程C ++的能力范围非常有限,使用模板无法生成这种代码。
这个特定问题的一些宏观问题并不是很糟糕......例如
#define defbinop(op) \
MyValue operator op (const MyValue& a, const MyValue& b) { \
return MyValue(a.value op b.value); \
}
defbinop(+)
defbinop(-)
defbinop(*)
defbinop(/)
defbinop(<<)
defbinop(>>)
...
更具可读性,没有任何严重的副作用......