如何在启用ARC的情况下将Objective-C代码转换为C++
How to translate Objective-C code to C++ with ARC enabling
一个与Objective-C块相关的博客说:当启用ARC时,以下代码:
typedef int (^blk_t)(int);
blk_t func(int rate)
{
return ^(int count){return rate * count;};
}
可以通过clang:的-rewrite-obj翻译成如下C++代码
blk_t func(int rate)
{
blk_t tmp = &__func_block_impl_0(__func_block_func_0, &__func_block_desc_0_DATA, rate);
tmp = objc_retainBlock(tmp);
return objc_autoreleaseReturnValue(tmp);
}
我试着用下列方法翻译,但没有成功。
- clang-rewrite objc test.m-->此命令可以将test.m转换为cpp代码。但是我看不到objc_retainBlock和objc_autoreleaseReturnValue的调用
- clang-rewrite objc-fobjc arc test.m->此命令将失败,并显示"错误:当前部署目标不支持自动__weak引用"。结果,不会生成cpp代码
- clang-rewrite objc-fobjc arc-mmacosx版本min=10.11 test.m,行为与#2相同
问题:如何使用clang的-rewrite-obj选项将启用ARC的Objective-C代码转换为cpp?
最后,我找到了缺少的clang选项:-fobjc runtime;在指定objc运行时版本后,重写工作就开始了。例如以下命令:
clang -x objective-c -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.1.sdk -rewrite-objc -fobjc-arc -fblocks -mmacosx-version-min=10.11 -fobjc-runtime=macosx-10.11 -O0 test.m
相关文章:
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- 如何将这行代码从C++转换为Objective-C
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- Objective-C源代码和clang -rewrite-objc C++代码之间有什么关系?
- 从 CPP 代码调用 Objective-C 方法
- 尝试将C++代码移植到服务器以将文件上传到Objective-C,但它不起作用
- Objective-C和C 代码的ANSI C代码
- 在不编写任何Objective-C代码的情况下,是否可以在C 中开发iPhone/iPad应用程序
- 将 Objective-C 代码转换为 C++
- 在Cocoa/Objective-C项目中包含C++代码时'class'未知类型名称
- 如何将Objective C代码添加到FireBreath项目中
- 防止从C++代码中调用 Objective-C 对象
- 用Objective-c++封装c++代码
- iOS,shared_ptr Objective-C 代码中的生命周期
- 如何在启用ARC的情况下将Objective-C代码转换为C++
- 当我编译Objective-C++代码时,我如何找到我缺少的库
- Objective-C块,c++变量和异步代码
- 在Objective c++代码中转换objc整数和c++枚举
- Swift vs Objective-C -重用c++代码
- 在c++代码中使用Facebook Connect(这是Objective C)