假设我有两个课程:
class A { public: A* Hello() { return this; } } class B:public class A { public: B* World() { return this; } }
让我们说B类的例子就是这样的:
B test;
如果我调用test.World() – > Hello()可以正常工作.
但是test.Hello() – > World()不会工作,因为Hello()返回一个类型.
我如何使Hello()返回B的类型?我不想使用虚拟函数,因为我们有超过20个不同的类继承A.
解决方法
你可以使用
CRTP,好奇的循环模板模式:
template<class Derived> class A { public: Derived* Hello() { return static_cast<Derived*>(this); } }; class B : public A<B> { public: B* World() { return this; } }; int main() { B test; test.World()->Hello(); test.Hello()->World(); }