Наследование префиксных и постфиксных операторов
Рассмотрим следующий код:
// 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(); }
};
Вероятно, это ужасная идея, но, по крайней мере, она скомпилируется.