C++: наследование и перегрузка оператора

У меня есть две структуры:

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;
    } 
};

Я хотел бы, чтобы следующее скомпилировало:

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

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

Есть ли любой способ сделать эту работу, или должен я определять оператор в Ftw также?

9
задан Nick Heiner 4 August 2010 в 23:34
поделиться

1 ответ

Проблема в том, что компилятор обычно создает для вас operator = (если вы его не укажете), а этот operator = скрывает унаследованный. Вы можете отменить это с помощью-декларации:

struct Ftw : public Odp<int>
{
    using Odp<int>::operator=;
    bool operator==(const Ftw& rhs)
    {
        return m_t == rhs.m_t;
    } 
};
22
ответ дан 4 December 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: