Наследование префиксных и постфиксных операторов

Рассмотрим следующий код:

// Only prefix operators
struct prefix
{
    prefix& operator--() { return *this; }
    prefix& operator++() { return *this; }
};

// Try to represent prefix & postfix operators via inheritance
struct any : prefix
{
    any operator--(int) { return any(); }
    any operator++(int) { return any(); }
};

int main() {

    any a;

    a--;
    a++;
    --a; // no match for ‘operator--’ (operand type is ‘any’)
    ++a; // no match for ‘operator++’ (operand type is ‘any’)

    return 0;
}

Я пытался создать иерархию классов. Базовый класс только для реализации префиксных операторов увеличения / уменьшения. И добавить постфиксные версии в производный класс.

Однако компилятор не может найти операцию префикса для объекта производного класса.

Почему это происходит, почему префиксные операторы не наследуются?

1 ответ

Решение

Используйте следующее для импорта скрытого operator-- а также operator++ из prefix учебный класс:

struct any : prefix
{
    using prefix::operator--;
    using prefix::operator++;
    any operator--(int) { return any(); }
    any operator++(int) { return any(); }
};

Живая демо

Вероятно, это ужасная идея, но, по крайней мере, она скомпилируется.

Другие вопросы по тегам