CRTP 奇异递归模板模式

#include 
template 
struct Base {
    Derived&self()
    {
        return static_cast(*this);
    }

    const Derived&self() const
    {
        return static_cast(*this);
    }

public:
    void start()
    {
        self().run();
    }
};

class Derived : public Base {
    friend Base;
    void run()
    {
        std::cout << "Derived run()" << std::endl;
    }
};
父类调用子类, 不过不同的 Base 是不同的类, 好像没什么用处

你可能感兴趣的:(模板编程)