gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:00 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com