对于您的示例的惯用等效项,您将定义operator==
如下:
friend bool operator==(const ViewMode &lhs, const ViewMode &rhs) {
return (lhs.w == rhs.w) && the rest;
}
friend bool operator!=(const ViewMode &lhs, const ViewMode &rhs) {
return !(lhs == rhs);
}
在 C++ 中,您通常不会编写函数来允许将ViewMode
对象与与ViewMode
. 我想如果您真的希望该比较返回 false,而不是拒绝编译,那么您可以添加几个模板运算符(作为自由函数,在类之外):
template <typename T>
bool operator==(const ViewMode &, const T&) {
return false;
}
template <typename T>
bool operator==(const T &, const ViewMode&) {
return false;
}
但我真的不推荐它。这个 Java 习语不适用于 C++,因为在 C++ 中你几乎不应该有一个对象,但不知道它的类型。
如果您希望您的 equals 函数是虚拟的,那么最好编写一个equals()
虚拟函数,而不是使用operator==
它。您可以将其编写为采用const ViewObject &
as 参数,因此不需要任何等效于instanceof
检查的方法。这也很好,因为 C++ 没有任何方法可以获取完全未知类型的对象并测试它是否是指定类型的实例。
在 C++ 中你很少需要多态的 equals 函数,但如果你std::unordered_map
在unordered_map
. 给它一个相等比较函数,它接受两个指针并调用equals
一个或另一个,以及一个做一些有意义的事情的哈希函数。