C++/Objective-C++ - 如何在NSDictionary中存储C++变量?

Bre*_*ett 5 c++ dictionary vector objective-c

我有一个C++类型的变量,std::vector<std::bitset<128> >它被定义并填充在一个C++类中(从我的Objective-C++类中调用).

我想将这个对象存储在NSDictionary- 或某些等价物中.我显然不能简单地添加std::vector<std::bitset<128> >到NSDictionary,因为它不是类型id.

所以我的问题是:我怎样才能实现相同的概念?如何std::vector<std::bitset<128> >在各种字典中存储? 我能id以某种方式将矢量对象包装在一个类型中吗?即使它不是直接字典,我还能使用另一种方法吗?我还需要它是可变的,所以我可以在运行时添加键/对象.

我看过了std::map<std::string, std::string>,但我不确定这是不是我要找的东西.我也没有发现任何可变的例子.

有谁知道如何实现这一目标?

Ast*_*ria 5

实际上NSValue似乎是解决方案.@ Taum的建议对于某些情况是正确的(当你将对象存储在某处并确保你的指针正在工作时).如果你创建了一些对象并且它的生命周期有限,但你需要进一步推动这个对象,请使用另一种NSValue方法

std::vector<std::bitset<128>> cppVector;
NSValue *value=[NSValue valueWithBytes:&cppVector objCType:@encode(std::vector<std::bitset<128>>)];
Run Code Online (Sandbox Code Playgroud)

当您需要获取此值时:

std::vector<std::bitset<128>> cppVector;
[value getValue:&cppVector];
Run Code Online (Sandbox Code Playgroud)

这也适用于简单的结构.


Tau*_*aum 1

您可以将指向它的指针存储在NSValue对象中。您只需要注意什么拥有它std::vector以及何时应该拥有free它。

存储:

std::vector<std::bitset<128>> *cppVector = myCppObject->methodReturningVector();
NSValue *value = [NSValue valueWithPointer:cppVector];
[myObjcDictionary setObject:value forKey:@"myKey"];
Run Code Online (Sandbox Code Playgroud)

使用以下命令取回 C++ 对象:

NSValue *value = [myObjcDictionary objectForKey:@"myKey"];
std::vector<std::bitset<128>> *cppVector = [value pointerValue]
Run Code Online (Sandbox Code Playgroud)