per l'equivalente idiomatico del vostro esempio, si potrebbe definire operator==
come segue:
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);
}
In C++ non normalmente scrivere una funzione per consentire ViewMode
oggetti da confrontare con qualcosa che non ha nulla a fare con ViewMode
. Suppongo che se si voleva davvero che il confronto per tornare falso, piuttosto che il rifiuto di compilare, allora si potrebbe aggiungere un paio di operatori di template (come funzioni liberi, al di fuori della classe):
template <typename T>
bool operator==(const ViewMode &, const T&) {
return false;
}
template <typename T>
bool operator==(const T &, const ViewMode&) {
return false;
}
ma ho davvero don' lo consiglio Quel linguaggio Java non si applica a C++, perché in C++ praticamente non si dovrebbe mai avere un oggetto, ma non si ha idea del suo tipo.
Se si desidera che la funzione equals sia virtuale, è probabilmente preferibile scrivere una funzione virtuale equals()
anziché utilizzare lo operator==
. Scriverlo per prendere un parametro const ViewObject &
, quindi non è necessario alcun equivalente al controllo instanceof
. Il che è altrettanto valido, perché C++ non ha modo di prendere un oggetto di tipo totalmente sconosciuto e verificare se si tratta di un'istanza di un tipo specificato.
Raramente è necessaria una funzione di uguale in polimorfo in C++, ma se la si utilizza ad esempio in std::unordered_map
, specificare i parametri di modello aggiuntivi su unordered_map
. Dagli una funzione di confronto di uguaglianza che prende due indicatori e chiama equals
su uno o l'altro e una funzione di hash che fa qualcosa di sensato.
fonte
2012-06-11 13:43:26
Ho rimosso il tag 'java' perché un esperto Java non può aiutare a rispondere a questa domanda. –
È passato molto tempo da quando ho scritto un C++, ma penso che dovrai sovraccaricare l'operatore ==. – ChadNC
Le schede stavano rovinando la tua formattazione. Quindi l'ho risolto per te. – Mysticial