2

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

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

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

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

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

4

2 回答 2

1

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

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

class ChildClass : BaseClass<ChildClass>
{
  public:
    virtual ChildClass* init();
};
于 2012-10-16T03:51:34.000 回答
0

您应该使用返回正确类型的 C++ 构造函数。它会像这样工作:

class BaseClass {
    public:
        BaseClass();
        virtual ~BaseClass();
};

class childClass : public BaseClass {
    public:
        childClass();
        virtual ~childClass();
};

然后你可以简单地调用new childClass,你会得到一个指向 childClass 的指针。

于 2012-10-16T03:49:23.830 回答