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

时间:2014-01-31 19:36:50

标签: c++ objective-c dictionary vector

我有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>,但我不确定这是不是我要找的。我也没有发现任何可变的例子。

有没有人知道如何实现这个目标?

2 个答案:

答案 0 :(得分:5)

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

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

当您需要获取此值时:

std::vector<std::bitset<128>> cppVector;
[value getValue:&cppVector];

对于简单的结构也很有效。

答案 1 :(得分:1)

您可以在NSValue对象中存储指向它的指针。您只需要小心拥有std::vector的内容以及应该free'的时间。

存储时间:

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

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

NSValue *value = [myObjcDictionary objectForKey:@"myKey"];
std::vector<std::bitset<128>> *cppVector = [value pointerValue]