NSDictionary - C++ 中的 Objective-C 代码

问题描述 投票:0回答:2

是否可以在

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
2个回答
2
投票

当然将 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 对象。


0
投票

您不需要 Objective-C 或更改 Objective-C 文件(.mm)来编译任何内容,您可以完全留在 C++ 中。但是命名发生了变化。请参阅 CFDictionaryCreate 和相关函数。

© www.soinside.com 2019 - 2024. All rights reserved.