2010-08-04 17 views
9

J'ai deux struct:C++: L'héritage et l'opérateur Surcharger

template <typename T> 
struct Odp 
{ 
    T m_t; 

    T operator=(const T rhs) 
    { 
     return m_t = rhs; 
    } 
}; 

struct Ftw : public Odp<int> 
{ 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 

Je voudrais ce qui suit pour compiler:

int main() 
{ 
    Odp<int> odp; 
    odp = 2; 

    Ftw f; 
    f = 2; // C2679: no operator could be found 
} 

Est-il possible de faire ce travail, ou dois-je définir la opérateur dans Ftw ainsi?

+0

Habituellement '' = opérateur prend le paramètre de référence const ... Il serait préférable de changer 'T opérateur = (const T rhs)' 'à T = opérateur (const T & rhs) ' – a1ex07

Répondre

22

Le problème est que le compilateur crée généralement un operator= pour vous (sauf si vous en fournissez un), et cela operator= cache le hérité. Vous pouvez passer outre à l'aide-déclaration:

struct Ftw : public Odp<int> 
{ 
    using Odp<int>::operator=; 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 
+0

Nice! Je ne savais pas à ce sujet. –