是否有更好的方法来重载类似的算术运算符?

时间:2015-08-13 06:21:04

标签: c++ operator-overloading

说我有一个相当复杂的结构:

struct Wrapper {
  int value;
};

我可以为结构重载运算符:

Wrapper operator+(const Wrapper &w1, const Wrapper &w2) {
  Wrapper tmp;
  tmp.value = w1.value + w2.value;
  return tmp;
}

很明显,我可以用类似的方式分别重载其他运算符(-*/ ...)。但是,如果我们重复相似的代码,它将变得复杂并容易出错。

根据我在C中的经验,可能会将宏用于此类任务,但似乎不推荐在C ++中使用宏。

那么有没有比这更好的方法来重载多个运营商,一次性?

1 个答案:

答案 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(>>)
...

更具可读性,没有任何严重的副作用......