对于 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 == B
和 B == A
吗?
最佳答案
使用Boost.Operators ,那么你只需要实现一个,boost 将为你定义其余的样板文件。
struct A
{};
struct B : private boost::equality_comparable<B, A>
{
};
bool operator==(B const&, A const&) {return true;}
这允许以任意顺序比较 A
和 B
的实例是否相等。
注意: private
继承在这里起作用是因为 Barton–Nackman trick .
关于c++ - 我是否必须手动实现比较运算符的交换性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191741/