我希望使基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数具有派生类的类型作为返回类型,如下所示:
class A {
virtual A operator++(int) =0;
}
class B : public A {
B operator++(int);
}
这会产生这种错误return type 'A' is an abstract class
。该怎么办?据我了解,后缀必须返回实际类型,而不是类型的引用/指针。
我希望使基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数具有派生类的类型作为返回类型,如下所示:
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. 发布了一个类似方法的链接。为了完整起见,我会保留我的答案,不要感到任何投票的压力。