是否有更好的方法来重载类似的算术运算符
Are there better ways to overload similar arithmetic operators?
假设我有一个相当复杂的结构:
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++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 将中间变量用于三元运算符(或类似运算符)以获得更好的性能
- 哪个更好:重载运算符*还是重载强制转换运算符
- 在 C++98 中实现移动构造函数和移动赋值运算符以获得更好的性能
- 我将如何使用大小运算符delete/delete[],以及它们为什么更好
- 需要更好地理解循环后增量运算符
- 显式调用类的强制转换运算符方法是否比强制转换更好?
- 是否有更好的方法来重载类似的算术运算符
- 矩阵乘法哪个更好?GLM 的重载 * 运算符或直接使用着色器