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

Are there better ways to overload similar arithmetic operators?

本文关键字:运算符 更好 方法 是否 重载      更新时间:2023-10-16

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

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