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

标签 c++ objective-c cocoa openframeworks cinder

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

但是,我也想做一些图形编程; OpenFrameworks 和 Cinder 是两个吸引我眼球的库,但我们在 C++ 领域。

我有 Java/Swing/Processing 背景……对 C 系列知之甚少。从原生 Cocoa 调用 C 和 C++ 库(如 Cinder 和 OF)的效率如何?

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

最佳答案

简而言之,C++ 适用于 OS X 和 iOS 程序,并且与 Objective-C 配合得很好。

更详细:

However, I'd also like to do some graphics programming; OpenFrameworks and Cinder are two libraries which catch my eye, but then we're in C++ land.

我不会直接代表这些图书馆发言。

以更笼统的方式回答您的问题:C++ 在您的应用程序中就很好,因为 C、C++、ObjC 和 ObjC++ 是 iOS 应用程序的一流开发语言。

I come from a Java/Swing/Processing background... don't know much about the C family. How effectively can you call C and C++ libraries, like Cinder and OF, from native Cocoa?

Objective-C++ 允许您在同一个翻译中使用 C、C++ 和 Objective-C。在需要的地方随意使用/组合 C++、C 或 ObjC。编译时间会增加,如果你走这条路会有一些限制*。否则,支持非常好。甚至 Apple 在他们的应用程序/库中也使用了大量的 C++。

And, bonus points: would a solution like this work on an iPhone or iPad?

当然。 c++11 对 iOS 和 OS X 的支持目前有点落后。然而,clang 团队一直在非常非常快地添加对它的支持。如果您想要最新的功能,可能会有一些障碍,所以如果您的项目依赖于最前沿的 C++ 和编译器功能,我会说不要使用它。当然,使用每个版本的最新 clang 功能对您的程序进行采样以确定它与您的程序的配合情况并无坏处。

更新:此时(2011 年 11 月 8 日)clang 几乎可以处理我抛给它的所有 C++ 2003 代码。与 GCC+LLVM 相比,代码速度和大小确实有所不同。我现在不想放弃任何一个,但是这两个编译器都适合我使用 C++ 2003,而 Apple 的 GCC 将不支持 c++11,所以如果你想要 c++11 特性,现在是开始测试 clang 的好时机在不久的将来。

  • C++ 是 iOS 上一般性能关键型开发的理想 (IMO),只要您的团队知道如何使用它。
  • 如果您出于正确的原因使用每种语言的正确功能并且存在良好的兼容性,那么混合使用 C、ObjC 和 C++ 将非常强大。这可以追溯到 OS X 几年前(尽管当时的编译器是 GCC)。

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

关于c++ - 你能在 Cocoa (Obj-C) 项目中使用 C++ 库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543791/

相关文章:

c++ - 运行 Casablanca 程序失败,在 Mac OS 上找不到 'openssl/conf.h' 文件

C++虚继承区别

c++ - int 指针数组

objective-c - 给予 NSTextField 焦点 -?

cocoa - 根据表格列的 isEnabled 出价自定义 NSTextFieldCell

c++ - 在构造函数中创建带有参数的类的数组

iphone - iOS获取用户信息

objective-c - 如何在命令行中使用 xcodebuild?

ios - 使用自定义对象 ios 键入 Cast

iOS - 存储用户登录 session 的正确方法