Я хочу сделать каждый производный класс базового класса для реализации функции (в данном случае оператора postfix), который имеет тип производного класса в качестве возвращаемого типа, как это:
class A {
virtual A operator++(int) =0;
}
class B : public A {
B operator++(int);
}
Это приводит к ошибкам return type 'A' is an abstract class
, Что делать? Насколько я понимаю, постфикс должен возвращать фактический тип, а не ссылку / указатель на тип.
Как насчет использования Шаблон 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. разместил ссылку с похожим подходом. Я буду держать свой ответ для полноты, не чувствую никакого давления, чтобы проголосовать за него.