mik*_*e_b 6 c++ compiler-construction objective-c objective-c++
我有一个小的C++应用程序,我导入了Objective-C类.它可用作Objective-C++文件,.mm,但任何包含可能最终包含某些Objective-C标头的标头的C++文件必须重命名为.mm扩展名以获取正确的GCC驱动程序.
有没有办法为Objective-C类编写一个纯粹的C++包装器,或者我可以以某种方式将Objective-C对象分开并将它们分开链接?也许即使Objective-C类成为一个小型库,我可以在编译时静态重新链接?
问题是这个代码是跨平台的,并且在通常不使用Objective-C(即不是Mac)的系统上编译更加困难.即使预处理器命令限制在Windows或Linux上实现Objective-C代码,原始代码仍然具有.mm扩展名,GCC仍将代码视为Objective-C++.
通常,您只需使用 C++ 类包装 Objective-C 类,例如使用不透明指针并将对 C++ 方法的调用转发给 Objective-C 方法。
这样,您的可移植 C++ 源代码永远不必看到任何 Objective-C 包含内容,理想情况下您只需更换不同平台上包装器的实现文件。
例子:
// c++ header:
class Wrapper {
struct Opaque;
Opaque* opaque;
// ...
public:
void f();
};
// Objective-C++ source on Mac:
struct Wrapper::Opaque {
id contained;
// ...
};
void Wrapper::f() {
[opaque->contained f];
}
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |