c++ - 有更好的方法来重载类似的算术运算符吗?

标签 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++ 中不推荐使用宏。

那么有没有比这更好的一次性重载多个运算符的方法呢?

最佳答案

不幸的是,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/

相关文章:

c++ - 运算符 << 必须只接受一个参数

c++ - 为模板类重载 operator[] - C++

c++ - 什么是 C++ 中的重载运算符?

C++20 显式默认相等运算符

c++ - 强制转换为 C++ 中的字符串运算符重载

c++ - 如何正确重载算术运算符,以便 "3"+ "4"在 C++ 中可以是 "7"

c++ - 如何获取应用于本地工作站的组策略对象列表

c++ - 子级访问同一父级的其他子级的元素

c++ - 初始化时无法将 ‘<brace-enclosed initializer list>’ 转换为 ‘int*’

c++ - VoIP:如何从 Qt 多媒体中的摄像头捕获实时音频/视频流字节?