假设我有一个相当复杂的结构:
struct Wrapper {
int value;
};
我可以重载结构的运算符:
Wrapper operator+(const Wrapper &w1, const Wrapper &w2) {
Wrapper tmp;
tmp.value = w1.value + w2.value;
return tmp;
}
很明显,我可以以类似的方式分别重载其他运算符(-
、*
、/
...)。但是如果我们重复类似的代码,就会变得复杂并且容易出错。
根据我在 C 方面的经验,可能可以使用宏来完成此类任务,但似乎在 C++ 中不推荐使用宏。
那么有没有比这更好的一次性重载多个运算符的方法呢?
最佳答案
不幸的是,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(>>)
...
更具可读性并且没有任何严重的副作用...
关于c++ - 有更好的方法来重载类似的算术运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980853/