抽象类中的纯虚函数,返回类型为基/派生类型
Posted
技术标签:
【中文标题】抽象类中的纯虚函数,返回类型为基/派生类型【英文标题】:Pure virtual function in abstract class with return type of base/derived type 【发布时间】:2014-11-28 00:23:43 【问题描述】:我希望让基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数将派生类的类型作为返回类型,如下所示:
class A
virtual A operator++(int) =0;
class B : public A
B operator++(int);
这会产生return type 'A' is an abstract class
类型的错误。该怎么办?据我了解,后缀必须返回实际类型,而不是类型的引用/指针。
【问题讨论】:
选择指针或引用,不需要完整的类型。 在后缀运算符的情况下,返回类型不能是没有修饰符的类类型吗? 铸造重新打开,我想这是正确的副本:***.com/q/18172858/1938163 【参考方案1】:如何使用CRTP pattern:
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. 发布了一个类似方法的链接。为了完整起见,我会保留我的答案,不要感到任何投票的压力。
【讨论】:
太棒了!这样做有什么缺点吗,比如生成的代码臃肿? @VaradMahashabde 我不知道;由于使用了虚函数,我认为它应该与典型的代码膨胀相同。以上是关于抽象类中的纯虚函数,返回类型为基/派生类型的主要内容,如果未能解决你的问题,请参考以下文章