我有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>
,但我不确定这是不是我要找的。我也没有发现任何可变的例子。
有没有人知道如何实现这个目标?
答案 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]