为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
侃侃无极 2019-07-29 15:20:59
从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了这样做的纯粹例子。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-07-29
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

最简单的解决方案是简单地告诉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 ++下编译。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 586 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信