混合Objective-C和C ++代码
-
12-09-2019 - |
题
我有使用由一个C ++库提供的功能一个Objective-C / C ++应用程序。
其中C ++类的包括一个枚举是这样的:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
包含(使用#import -if该事宜)与一个Objective-C / C ++源文件(* .mm)上述类声明头文件将使编译失败,因为预处理器将取代的“是”通过术语 “(BOOL)1”(以及类似的 “否” 通过 “(BOOL)0”)。
有一种方法来解决,如果没有重命名枚举的值?
解决方案
YES和NO是预定义的常数的在Objective-C的,在报头objc.h声明。
您应该能够防止预处理器展开“YES”和“NO”宏观的。这可以通过在本地 #undef
fing 他们来完成。
但在技术上,如果您使用的是语言的关键字作为标识符,你可以期望的麻烦。你会不会写含有称为MAX_PATH
成员的类,你会吗?
其他提示
<击>的#import
物确实 - C ++头在一个Objective-C ++源文件应包含#include
。我认为,虽然是不是100%确定,即的选择包括指令(#include
VS #import
)确定哪个预处理器使用。击>
<击>也可逆转在枚举常数的声明,因为通过默认,枚举的构件与从0开始的整数相关联。击>
每评论,我错了。看起来你不得不重新改写枚举。遗憾:(
不隶属于 StackOverflow