Чистая виртуальная функция в абстрактном классе с возвращаемым типом базового / производного типа

Я хочу сделать каждый производный класс базового класса для реализации функции (в данном случае оператора postfix), который имеет тип производного класса в качестве возвращаемого типа, как это:

class A {
virtual A operator++(int) =0;
}

class B : public A {
B operator++(int);
}

Это приводит к ошибкам return type 'A' is an abstract class, Что делать? Насколько я понимаю, постфикс должен возвращать фактический тип, а не ссылку / указатель на тип.

0

Решение

Как насчет использования Шаблон CRTP:

template <typename T>
class A {
virtual T operator++(int) =0;
};

class B : public A<B> {
B operator++(int) override
{
// do something here
return *this;
}
};

PS: только что увидел, что @Marco A. разместил ссылку с похожим подходом. Я буду держать свой ответ для полноты, не чувствую никакого давления, чтобы проголосовать за него.

1

Другие решения


По вопросам рекламы [email protected]