2009-01-12 9 views
7

En mis clases A menudo escribo una rápida operator!= devolviendo !(*this == rhs), por ejemplo:rápida y sucia operador =

class Foo 
{ 
private: 
    int n_; 
    std::string str_; 
public: 
    ... 
    bool operator==(const Foo& rhs) const 
    { 
     return n_ == rhs.n_ && str_ == rhs.str_; 
    } 

    bool operator!=(const Foo& rhs) const 
    { 
     return !(*this == rhs); 
    } 
}; 

no puedo ver ningún problema obvio con hacer esto, pero pensé en preguntar si alguien sabe de cualquier.

+0

+1 para el gusto todavía sobrecarga de operadores y no IsEqual (ObjA, ObjB). Encuentro esto aseado – Perpetualcoder

Respuesta

11

Creo que es el método preferido para implementar operator!= para que no se repita y tiene una relación correcta garantizada con operator==.

0

No, eso está absolutamente bien, hago exactamente lo mismo.

2

Definición operator!= como !operator== es bien

Para conseguir estos operadores equivalentes triviales definir fácilmente, siempre uso Boost.Operators.
La caja con solo operator== y operator!= (es decir, usando equality_comparable<>) no gana mucho.

Pero cuando necesita menos y más que también, o alguna combinación de operator+, operator* etc. esto se convierte en muy conveniente.

Un ejemplo para su caso leería

class Foo : private boost::equality_comparable<Foo> 
{ 
    private: 
    int n_; 
    std::string str_; 
    public: 
    ... 
    bool operator==(const Foo& rhs) const 
    { 
     return n_ == rhs.n_ && str_ == rhs.str_; 
    } 

}; 
Cuestiones relacionadas