在C ++中编译时获取子类型

时间:2012-10-16 03:40:16

标签: c++ objective-c

我有一个引用计数的基类,它将是我的对象的大多数的父级。它有自己的小参考计数方法。麻烦的是,这些可能是子类。在某种程度上,我试图实现NSObject,但在C ++中。

因此,这意味着存在'init'方法。

因此,init方法应该始终返回子类的类型。想象一下:

class BaseClass{
public:
virtual childclass* init();
}

我知道在Objective-C中这很容易,因为它返回'id'并且不需要强制转换。但是在C ++中没有'id'这样的东西,因此我希望有一个宏或者什么东西会自动将子类*扩展到实际的子类中。我对C ++很陌生,所以我不确定如何实现它。

2 个答案:

答案 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的指针。