Objective-C实例进入C ++类

时间:2012-11-07 19:10:46

标签: c++ objective-c instance objective-c++ pimpl-idiom

如何将Objective-c类实例化为CPP类?

例如我的CPP课程:

class Foo{
public:
    Foo();
private:
    MyObjcClass* myObjcClass; //it does not work
}

我该怎么做?

注意我使用.m作为Objective-C,使用.cpp作为C ++。

非常感谢!

2 个答案:

答案 0 :(得分:3)

无论

  • 编译为Objective-C ++
  • 或将其声明为id

如果您使用id,则应在定义中引入类型,例如:

// Foo.mm
Foo::~Foo() {
  MyObjcClass * a = this->myObjcClass;
  [a release];
}

通常,您应该使用MyObjcClass保留类型(id)和避免,但将变量声明为id与C和C ++兼容,因此您可以使用id来避免将包含Foo.hpp的所有内容编译为ObjC ++。

答案 1 :(得分:1)

有两种方法可以做到这一点。理智的方法是使用Objective-C ++。您可以使用扩展名为.mm的文件执行此操作,也可以更改构建设置。默认是基于文件扩展名进行编译,但您可以强制它在.cpp.m文件上使用Objective-C ++。

疯狂的方法是在objc.h中使用原始的Objective-C接口。