C ++子类参数化类,并使用子类作为特化

时间:2011-02-11 22:42:55

标签: c++ templates inheritance

我想要这样的事情:

class TestParent<class T>
{
    T* some();
}

class TestChild : public TestParent<TestChild>
{};

这可能吗?

感谢。

2 个答案:

答案 0 :(得分:4)

绝对!此技术通常用于the Curiously Recurring Template Pattern等高级技术或实现static polymorphism。如果你进行高级C ++编程,你会看到很多。

答案 1 :(得分:2)

这是可能的,但只有在您定义some的实现时,否则您将面临编译错误。您可能还希望添加受保护的构造函数,以便无法在标头范围中定义基类的方式之外创建和使用基类。

template<typename T>
class TestParent{
    public:

        T* some() { return new T(); }

    //this is suggested
    protected:
        TestParent(){}
};

class TestChild : public TestParent<TestChild>{}

curiously recuring template pattern和其他来自policy-based design的其他技巧使用,这些技巧受到了Alexandrescu的book的欢迎。