Por el equivalente idiomático de tu ejemplo, definiría operator==
de la siguiente manera:
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);
}
En C++ no suelo escribir una función para permitir ViewMode
objetos que han de compararse con algo que no tiene nada en absoluto para hacer con ViewMode
. Supongo que si realmente quería que la comparación para volver falsa, en lugar de negarse a compilar, entonces se podría añadir un par de operadores de plantillas (como funciones libres, fuera de la clase):
template <typename T>
bool operator==(const ViewMode &, const T&) {
return false;
}
template <typename T>
bool operator==(const T &, const ViewMode&) {
return false;
}
pero realmente don' lo recomiendo Esa expresión idiomática de Java no se aplica a C++, porque en C++ casi nunca debería tener un objeto, pero no tiene idea de su tipo.
Si desea que su función equals sea virtual, entonces probablemente sea mejor escribir una función virtual equals()
, en lugar de usar operator==
para ello. Lo escribiría para tomar un parámetro const ViewObject &
como parámetro, por lo que no es necesario ningún equivalente al cheque instanceof
. Lo cual es bueno, porque C++ no tiene forma de tomar un objeto de tipo totalmente desconocido y probar si se trata de una instancia de un tipo especificado.
Raramente necesita una función de igual polimorfo en C++, pero si la estuviera usando, por ejemplo, en std::unordered_map
, especificaría los parámetros de la plantilla adicional al unordered_map
. Dale una función de comparación de igualdad que toma dos punteros y llama al equals
en una u otra, y una función de almohadilla que hace algo sensato.
Eliminé la etiqueta 'java' porque un experto en Java no puede ayudar a responder esta pregunta. –
Ha pasado mucho tiempo desde que escribí C++ pero creo que tendrás que sobrecargar el operador ==. – ChadNC
Las pestañas estaban estropeando su formateo. Así que lo arreglé por ti. – Mysticial