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

标签 c++ objective-c

我有一个引用计数的基类,它将成为我的大多数 对象的父类。它有自己的小引用计数方法。问题是,这些可能会被子类化。在某种程度上,我正在尝试实现 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/

相关文章:

c++ 复制文件\通用实现

c++ - OpenGL:如何设置渲染器以不显示阴影、灯光和颜色阴影?

c++ - 在 throw 参数周围添加括号是否有任何效果?

ios - 委托(delegate)方法在使用 If 语句测试时调用失败,但在没有 If 语句的情况下正确调用

objective-c - 启动画面不显示在 iPad 上,但显示在模拟器上

c++ - 如何在方法中返回 C++ 数组指针

iphone - Objective-C 中的 "implicit declaration of function"错误

ios - 在 UIViewController 中显示 uitableview 的问题 - 未对齐

ios - 如何通过单击 TableView 单元格打开新 View ?

c++ - 将 lambda 函数传递给其他方法