从Objective-C迁移到C++的最佳方法是什么?

5
我完全没有Objective-C经验,但我有很强的C ++背景。是否有自动化工具/脚本或最坏情况下,使用某些优秀参考手动方法将Objective-C编写的代码移植到C ++?涉及哪些困难?
编辑: 据我所知,该代码在Objective-C中使用相当琐碎。这是一个iPhone应用程序,可能不会在操作系统级别使用太多UI。 C ++版本是为非Apple平台设计的,在该平台上GNUStep不可用,因此Objective-C ++不是一种选择。

你确定方向没搞反吗?你有很强的C++背景,但是你想将东西移植C++? - Cebjyre
@Cebjyre,他不太懂Obj-C,无法将其翻译成C++。但是,如果由于错误的翻译而出现问题,他可以纠正C++中的错误。至少,这是我推测的。 - strager
我承认这是一个可能性,但我认为转换过程很可能会在有缺陷的代码中引入更多的错误,因此从学习的角度来看,将已知的C++代码转换成Obj C代码的工具会非常方便。 - Cebjyre
4个回答

7

我曾经遇到过同样的问题,以下是一些解决方案:

  • 微软现在提供了自己的Objective C“桥接器”,但仅适用于UWP应用程序。

    https://github.com/Microsoft/WinObjC

  • 2007年,我尝试在Visual Studio中支持Objective-C,并编写了自己的ObjC运行时,但我没有更多时间为其编写解析器。如果你有时间,可以尝试一下 :)

    http://code.google.com/p/qobjc/

  • 我用C++编写了Foundation Framework的基本功能。在这种情况下,您需要手动移植;您的代码将是C++,但它会像Objective-C一样。这个库可以在iPhone上使用。

    http://code.google.com/p/dcocoa/


3
我不知道有任何自动化工具可以完成这项任务。Objective-C的动态特性非常难以翻译成C++,因此除了一些简单的Objective-C代码外,需要付出相当大的脑力。您是否愿意继续使用OS X(或者如果您是少数在OS X之外使用Objective-C的人,则保留GNUStep依赖)?如果是这样,最简单的方法是使用Objective-C++来构建Objective-C和C++代码之间的桥梁。Objective-C++是苹果对Objective-C和GCC编译器的扩展,允许您混合使用Objective-C和C++代码。因此,您可以创建调用或引用(但不继承自)C++对象的Objective-C对象,并且您可以从C++代码中向Objective-C实例发送Objective-C消息。

0

Objective-C只是一个预处理器(和运行时库)。在移植所有库而不是最终用户代码中会发现更多问题。 当翻译时,“Nil-eating behavior”将会很有趣。

在使用Objective-C框架一段时间后,您很可能会开始看到所有c++代码中的糟糕设计。


0
虽然Clang并不完全具备所有功能,但它配备了一个可以将Objective-C/C++重写为C++的转译器,使用-rewrite-objc标志(https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-rewrite-objc)。
我有一篇博客文章,您可以在其中了解更多关于这种方法及其限制的信息:https://www.jviotti.com/2023/12/01/understanding-objective-c-by-transpiling-it-to-cpp.html
尽管重写器并不完美,但它确实非常有帮助,我们在Postman中大量使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接