gpt4 book ai didi

c++ - 我可以在编译和链接时将 C++ 主函数和类与 Objective-C 和/或 C 例程分开吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:13 25 4
gpt4 key购买 nike

我有一个小型 C++ 应用程序,我导入了 Objective-C 类。它作为 Objective-C++ 文件 .mm 工作,但任何包含 header 的 C++ 文件可能最终包含一些 Objective-C header ,必须重命名为 .mm 扩展名以用于正确的 GCC 驱动程序。

有没有办法为 Objective-C 类编写一个纯 C++ 包装器,或者我能否以某种方式将 Objective-C 对象分离出来,然后单独链接它们?也许即使 Objective-C 类成为一个小库,我也可以在编译时静态重新链接?

问题在于这段代码是跨平台的,在通常不使用 Objective-C 的系统(即非 Mac)上编译起来比较困难。尽管预处理器命令限制了 Objective-C 代码在 Windows 或 Linux 上的任何实现,但原始代码仍然具有 .mm 扩展名,并且 GCC 仍将代码视为 Objective-C++。

最佳答案

通常你只是用 C++ 类包装你的 Objective-C 类,例如使用 opaque pointers并将对 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];
}

// ...

关于c++ - 我可以在编译和链接时将 C++ 主函数和类与 Objective-C 和/或 C 例程分开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com