你能在Cocoa(Obj-C)项目中使用C++库吗?

all*_*rry 5 c++ cocoa objective-c openframeworks cinder

我正在考虑学习Objective-C和Cocoa,主要是为了使用Apple的工具和GUI.

但是,我也想做一些图形编程; OpenFrameworks和Cinder是两个引起我注意的库,但后来我们在C++领域.

我来自Java/Swing/Processing背景......对C系列不太了解.如何有效地从本机Cocoa调用Cinder和C++等C和C++库?

并且,奖励积分:这样的解决方案可以在iPhone或iPad上运行吗?

jus*_*tin 12

简而言之,C++适用于OS X和iOS程序,并且可以很好地与Objective-C一起使用.

更详细:

但是,我也想做一些图形编程; OpenFrameworks和Cinder是两个引起我注意的库,但后来我们在C++领域.

我不会直接代表那些图书馆.

用更一般的术语回答你的问题:C++在你的应用程序中很好用,因为C,C++,ObjC和ObjC++是iOS应用程序的一流开发语言.

我来自Java/Swing/Processing背景......对C系列不太了解.如何有效地从本机Cocoa调用Cinder和C++等C和C++库?

Objective-C++允许您在同一个翻译中使用C,C++和Objective-C.您可以根据需要随意使用/组合C++,C或ObjC.编译时间会增加,如果你选择这条路线,会有一些限制*.否则,支持非常好.即使Apple在他们的应用程序/库中使用了大量的C++.

并且,奖励积分:这样的解决方案可以在iPhone或iPad上运行吗?

当然.对iOS和OS X的c ++ 11支持目前有点落后.然而,clang团队一直在非常迅速地增加对它的支持.如果你想要最新的功能,可能会有一些障碍,所以如果你的项目依赖于它,我会说阻止前沿的C++和编译器功能.当然,使用每个版本的最新clang功能对您的程序进行采样并不会有什么坏处,以确定它与您的程序的兼容性.

更新:此时(2011年11月8日)clang几乎可以处理我抛出的所有C++ 2003代码.与GCC + LLVM相比,代码速度和大小确实有所不同.我不想放弃这一点,但两个编译器对我来说都适用于C++ 2003,Apple的GCC不支持c ++ 11,所以现在是开始测试clang的好时机,如果你想要c ++ 11的功能在不远的将来.

  • 只要您的团队知道如何使用C++,C++就是iOS上一般性能关键开发的理想选择(IMO).
  • 如果您出于正确的原因使用每种语言的正确功能,并且存在良好的兼容性,则混合C,ObjC和C++非常强大.这可以追溯到OS X(虽然编译器当时是GCC).

*限制:这些都是合理的限制 - 你需要的所有功能都存在,但有一些人们可能期望的东西是不可能的.最常见的可能是无法导出不同对象模型的类型.也就是说,您无法合理地从objc类型创建c ++类型,但您可以在任一对象类型中自由声明多种类型的ivars.


Pen*_*One 6

虽然Apple"更喜欢"开发人员使用OpenGL,但可以在iOS应用程序中使用OpenFrameworks和Cinder(参见相关的SO问题:OpenGL ES,OpenFrameworks,Cinder和IOS创意开发).