是否可以在
C++ 类中使用NSDictionary
?我知道,我可以在 C++ 中使用 Objective-C 类(http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++),但是对于NSDictionary
,我需要标头...但是如果我这样做#import
,它无法编译。
PS:我知道,我不应该混合 Objective-C(++) 和 C++,但我正在编写多平台 OpenGL 应用程序,对于 EAGL 初始化,输入参数之一是
NSDictionary
。我可以在 Objective-C 中初始化 OpenGL,但这会破坏我的 OOP 设计。
当然将 C++ 类编译为 Objective-C++(.mm 扩展名),你不会有任何问题。我这样做时遇到的唯一问题是您无法在 C++ 标头中定义 Objective-C++ 类型。因此,我使用 void* 并使用 a
将其转换为 void*pVoidDict = (__bridge_retained void*)[NSDictionary dictionary];
您需要执行桥接转换才能使用它:
unsigned int dictCount = [(__bridge NSDictionary*)pVoidDict count];
唯一的问题是你必须记住最后释放它。您可以通过将其强制转换回 NSDictionary 来完成此操作,如下所示:
NSDictionary* dict = (__bridge_transfer NSDictionary*)pVoidDict;
这会将其返回到 ARC 控制,并且当析构函数退出时,它将根据标准 ARC 规则添加到自动释放池中。
它看起来不是特别好看,但我在跨平台库中经常使用它,这样我就可以用 C++ 类包装 Objective-C 对象。
您不需要 Objective-C 或更改 Objective-C 文件(.mm)来编译任何内容,您可以完全留在 C++ 中。但是命名发生了变化。请参阅 CFDictionaryCreate 和相关函数。