c++ - 我是否必须手动实现比较运算符的交换性?

标签 c++ c++11 comparison operator-overloading

对于 n 个不同的类,它们都应该与 operator==operator!= 相当,因此有必要实现 < em>(n ^ 2 - n) * 2 运算符(operator)手动操作。 (至少我认为是这个词)

三个类(class) 12 个,四个类(class) 24 个。我知道我可以像这样根据其他运算符来实现其中的很多:

operator==(A,B); //implemented elsewhere

operator==(B,A){ return A == B; }

operator!=(A,B){ return !(A == B); }

但它看起来仍然很乏味,尤其是因为 A == B 总是会产生与 B == A 相同的结果,而且似乎没有任何理由实现它们的两个版本。

有办法解决这个问题吗?我真的必须手动实现 A == BB == A 吗?

最佳答案

使用Boost.Operators ,那么你只需要实现一个,boost 将为你定义其余的样板文件。

struct A
{};

struct B : private boost::equality_comparable<B, A>
{
};

bool operator==(B const&, A const&) {return true;}

这允许以任意顺序比较 AB 的实例是否相等。

Live demo

注意: private 继承在这里起作用是因为 Barton–Nackman trick .

关于c++ - 我是否必须手动实现比较运算符的交换性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191741/

相关文章:

c++ - 使用列名 vector 生成 sql 语句

c++ - 在 OpenGL 中创建不可变缓冲区

arrays - 如何使用 MATLAB 返回包含 list1 和 list2 中的元素的列表

ruby - 比较 ruby 哈希

c++ - vector 操作和存储到第三个 vector

c++ - Qt - setupUi( )

c++ - wchar_t 是否保证与任何整数类型不同?

javascript - 使用一元加号 (+) 比较日期是否相等

c++ - 使用元素键迭代 STL 容器

c++ - std::vector 大小?