猿问

从C ++成员函数调用Objective-C方法?

从C ++成员函数调用Objective-C方法?

我有一个class(EAGLView)调用类的成员函数C++没有问题。现在,问题是我需要在C++该类中调用一个objective-C function [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];我在C++语法中无法做到的。

我可以将这个Objective-C调用包装到同一个Objective-C类中,它首先调用C ++类,但后来我需要以某种方式调用该方法C++,而我无法弄清楚如何去做。

我试图给一个指向EAGLViewC ++成员函数的对象的指针,并EAGLView.h在我的C++类头中包含“ ” 但我得到了3999个错误..

那么......我该怎么做?一个例子很好..我只找到C了这样做的纯粹例子。


侃侃无极
浏览 587回答 3
3回答

米琪卡哇伊

您可以将代码编译为Objective-C ++ - 最简单的方法是将.cpp重命名为.mm。如果你包含它会正确编译EAGLView.h(你因为C ++编译器不理解任何Objective-C特定的关键字而得到很多错误),你可以(大部分)混合使用Objective-C和C ++但是你喜欢。

慕的地8271018

最简单的解决方案是简单地告诉Xcode将所有内容编译为Objective C ++。为Compile Sources设置项目或目标设置与Objective C ++相同并重新编译。然后你可以在任何地方使用C ++或Objective C,例如:void CPPObject::Function( ObjectiveCObject* context, NSView* view ){    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)view.layer]}这与将.cpp或.m重命名为.mm的所有源文件具有相同的效果。这有两个小缺点:clang无法分析C ++源代码; 一些相对奇怪的C代码不能在C ++下编译。
随时随地看视频慕课网APP
我要回答