c – 继承:返回自身类型的函数?

前端之家收集整理的这篇文章主要介绍了c – 继承:返回自身类型的函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个课程:
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();
}

猜你在找的C&C++相关文章