C++:继承和运算符重载

Nic*_*ner 9 c++ inheritance operator-overloading

我有两个结构:

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;
    } 
};
Run Code Online (Sandbox Code Playgroud)

我想要以下编译:

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

    Ftw f;
    f = 2; // C2679: no operator could be found
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让这项工作,或者我也必须定义运营商Ftw

jpa*_*cek 22

问题是编译器通常会operator=为您创建一个(除非您提供一个),这会operator=隐藏继承的.您可以通过using声明来否决它:

struct Ftw : public Odp<int>
{
    using Odp<int>::operator=;
    bool operator==(const Ftw& rhs)
    {
        return m_t == rhs.m_t;
    } 
};
Run Code Online (Sandbox Code Playgroud)