4

我正在尝试开发一个可以“堆叠” FITS 图像的应用程序。要阅读 FITS 图像,我可以使用 CCFits(一个 C++ 库)或 CFITSIO(AC 库)——没有原生的 Objective-C 库。

我更喜欢使用 CCFits,因为它允许面向对象的设计,我希望这能让我更好地组织程序。我已经尝试过使用 CFITSIO,但一段时间后它变得相当笨拙(当然,这可能是因为我没有开发大型应用程序的经验)。

所以总的来说,解决这个问题的最佳方法是什么?我应该为 CFITSIO 函数编写包装器并编写自己的类吗?有没有办法在 Objective-C 中使用 C++ 类 - 该库包含相当多的类,我知道我可以使用不透明指针来环绕类,但是如何保留类继承之类的东西?我是否必须在 Objective-C 中手动子类化一个类并将子类包装在那里?

4

3 回答 3

3

您可以使用 Objective-C++ 轻松混合 C++ 和 Objective-C。在 XCode 中,只需将 .m 文件重命名为 .mm,它就会将文件识别为 Objective-C++。然后你可以在你的 Objective-C 代码中使用 C++ 类(有一些限制,但不是很多)。

由于 Objective-C 是 C 的扩展,您可以轻松地在任何 Objective-C 程序中使用 C 库。

于 2012-04-14T18:36:58.377 回答
2

正如@myrkos 所说,混合C++ 和Objective-C 很容易。但是,请务必仔细阅读这两种语言的交互方式。特别是,您不能从 C++ 类继承 Objective-C 类,反之亦然(您似乎在问题中提到了这一点)。

这在实践中通常不是问题。

但是,它们组合得非常好(也就是说,您可以将 Objective-C 对象作为 C++ 类的成员,反之亦然——只要它都在 .mm 文件中)。如果您将 C++ 对象作为 Objective-C 类的 ivar按值保存,那么将自动为您调用构造函数和析构函数。

于 2012-04-14T19:11:59.280 回答
0

所以总的来说,解决这个问题的最佳方法是什么?

使用您熟悉的变体 (CCFits)。

我应该为 CFITSIO 函数编写包装器并编写自己的类吗?

不。

有没有办法在 Objective-C 中使用 C++ 类 - 该库包含相当多的类,我知道我可以使用不透明指针来环绕类,但是如何保留类继承之类的东西?

Objective-C++ 允许您在同一个翻译中使用 C、Objective-C 和 C++ 程序,几乎没有问题。因此,您的实现可以根据需要混合 Cocoa 和 C++。C++ 类可以保存 ObjC 类型,而 ObjC 类型可以保存 C++ 类型。

我是否必须在 Objective-C 中手动子类化一个类并将子类包装在那里?

只需按原样使用 CCFits 库。将其包装在 ObjC 类型中几乎没有什么好处,而且会浪费很多时间。

如果您想在某些领域坚持使用严格的 ObjC,那么您将需要学习如何将 C++ 类型隐藏在 ObjC 接口后面(不是包装接口——只是应用程序使用 CCFits 的高级接口)。

于 2012-04-14T20:10:49.940 回答