我想要这样的事情:
class TestParent<class T>
{
T* some();
}
class TestChild : public TestParent<TestChild>
{};
这可能吗?
感谢。
答案 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的欢迎。