c++中操作符重载需要写多种重复版本(引用与右值引用),有无方法可以简化
例如:
mat33 operator +(mat33& m1, mat33& m2);
mat33 operator -(mat33& m1, mat33& m2);
mat33 operator +(mat33&& m1, mat33&& m2);
mat33 operator -(mat33&& m1, mat33&& m2);
mat33 operator +(mat33&& m1, mat33& m2);
mat33 operator -(mat33&& m1, mat33& m2);
mat33 operator +(mat33& m1, mat33&& m2);
mat33 operator -(mat33& m1, mat33&& m2);
有无什么方法可以简化这一大串?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你想要减少声明的次数,那是有办法的,简化代码似乎不可能。按照你的声明思路,
&&,&&
和&&,&
可以将工作代理给&,&&
。这样代码不复杂,也没有重复。这里至少需要两个实现,其中一个移动数据,另一个不移动数据。移动数据分lhs和rhs。同时还要兼顾ADL。实现这些至少需要声明三个重载。用模板可以将声明减少到两个:
PS: c++17后可以用constexpr if实现静态分枝。c++17之前编译器也通常可以完成这样的优化。
测试代码:
不就搞定了。。。
const & 能匹配所有引用(左值、右值、常量左值、常量右值)。