我有一个引用计数基类,它将是我大多数对象的父类。它有自己很少的引用计数方法。麻烦的是,这些可能会被子类化。以一种方式,我尝试实现NSObject,但是使用C++。

因此,这意味着存在一个“init”方法。

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

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

我知道在Objective-C中这很容易,因为它返回“id”并且不需要强制转换。但是在C++中没有“id”之类的东西,因此我希望有一个宏或自动将childclass *扩展为实际子类的东西。我是C++的新手,所以我不确定如何实现它。

最佳答案

这可以通过Curiously Recurring Template Pattern完成。

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

class ChildClass : BaseClass<ChildClass>
{
  public:
    virtual ChildClass* init();
};

关于c++ - 在C++中的编译时获取子类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12907213/

10-10 11:25