0

参考问题:#import C++ Header File in iPhone/iPad Project 时出现问题

好吧,我的项目相对庞大,无法解决将项目文件的全部或部分更改为..m.mmFile Inspector

那是因为我的同事和库作者都没有严格遵循 C++ 标准,例如分配void*int*和其他各种违规行为。Objective C 将允许这些并且只是给出警告。

我想要的 C++ 头文件#import是一个库。它在其标头中使用关键字命名空间.a,而其实现在程序集文件中。这意味着几乎不可能破解它们。除此之外,我的项目还包括其他仅与 Objective C 兼容的库。

有谁知道如何解决这个问题?

我能想象的方式如下:

  1. 找到namespace的替代方案,但我仍然想QCAR::Renderer在我的项目中编写代码。

  2. 告诉编译器识别 C++ 头文件(嗯,这可能是不可能的)

编辑

#ifdef __cplusplus
# include MyCPPHeader.h
#endif

如果我使用它,MyCPPHeader.h真的会被包含在 Objective-C 环境中吗?我猜不会。这违反了不入侵图书馆的原则。

编辑

即使我更改了这些.mm文件以包含该 C++ 标头,我也会收到一个链接错误消息Undefined symbols for architecture armv7:。当我的 .mm文件包含 其他库中.h的标头时会发生这种情况。

4

1 回答 1

0

一年前我已经解决了这个问题,但是对于正在寻找答案的其他人来说,这里是解决方案。

假设 C++ 样式的标题名为cpp.h. 在我的项目中,我从不#import "cpp.h". 我写了一个 C 风格的头文件,命名为c.h,作为cpp.h. 然后我写了一个C++实现源文件,命名c.mmc.h通过调用cpp.h. 如果我想在 中调用函数cpp.h,我#import c.h会改用包装函数。

以下是可能更清晰的解释:

cpp.h使用 C++ 风格的头文件namespace,它的实现是汇编代码,所以很难改变

c.hC 样式标头作为包装器cpp.h

c.mmC++ 实现c.h通过调用函数 in 来实现函数 incpp.h

#import "c.h"使用包装函数

于 2014-12-20T04:34:00.113 回答