gpt4 book ai didi

c++ - 如何在 Objective-C 中包装 C++ 库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:11 25 4
gpt4 key购买 nike

我有一个包含数据结构实现的 C++ 库(仅限 .h),我想在我的 iPhone 应用程序中使用它。

首先,我在 objective-C++ 中编写了一个包装器作为一个类,通过组合,它具有 C++ 类的 ivar。然后我“不得不”将包装器类扩展名更改为 .mm,这看起来不错。但是后来我必须将这个包装的类文件包含到其他几个文件中,所以我也必须更改它们的扩展名(以防止一波编译时错误)。

我说的对吗?有没有办法将 .mm 扩展名“限制”为几个文件?(从而防止名称冲突等)

编辑:更多可能有用的信息,我使用 LLVM 1.5 作为编译器(我注意到编译时错误的数量从 GCC 4.2 到 LLVM 1.5 不等,但我不确定这是否意味着什么,因为我没有全部看过)

最佳答案

我的建议是将 C++ 位包装在#ifdefs 中:

//MyWrapper.h

#ifdef __cplusplus
class ComposedClass;
#endif

@interface MyWrapper : NSObject
{
#ifdef __cplusplus
ComposedClass *ptr;
#endif
}

// wrapped methods here...
@end

这是 PIMPL 惯用语的一个有点蹩脚的版本,但代码更少,并且可以有效地从纯 Objective-C 代码中隐藏 C++ 主义。显然,您必须在 MyWrapper.mm 中包含 ComposedClass 的 header 。

如果 ComposedClass 是模板类型,您需要将第一个 block 修改为

#ifdef __cplusplus
#include "ComposedClass.h"
#endif

而不是使用前向声明,然后,当然,在您的 Objective-C 类的实例变量声明中使用模板化类型。

这种方法是 suggested作者是 Apple 的运行时大师 Greg Parker。

关于c++ - 如何在 Objective-C 中包装 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799169/

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