我有一个引用计数的基类,它将是我的对象的大多数的父级。它有自己的小参考计数方法。麻烦的是,这些可能是子类。在某种程度上,我试图实现NSObject,但在C ++中。
因此,这意味着存在'init'方法。
因此,init方法应该始终返回子类的类型。想象一下:
class BaseClass{
public:
virtual childclass* init();
}
我知道在Objective-C中这很容易,因为它返回'id'并且不需要强制转换。但是在C ++中没有'id'这样的东西,因此我希望有一个宏或者什么东西会自动将子类*扩展到实际的子类中。我对C ++很陌生,所以我不确定如何实现它。
答案 0 :(得分:1)
这可以通过Curiously Recurring Template Pattern完成。
template <class childclass> class BaseClass
{
public:
virtual childclass* init();
};
class ChildClass : BaseClass<ChildClass>
{
public:
virtual ChildClass* init();
};
答案 1 :(得分:0)
你应该使用C ++的构造函数来返回正确的类型。它会像这样工作:
class BaseClass {
public:
BaseClass();
virtual ~BaseClass();
};
class childClass : public BaseClass {
public:
childClass();
virtual ~childClass();
};
然后你可以简单地调用new childClass
,你就会得到一个指向childClass的指针。