C++ / Objective-C++ - 如何在 NSDictionary 中存储C++变量?
C++ / Objective-C++ - How can I store a C++ variable in an NSDictionary?
我有一个类型为std::vector<std::bitset<128> >
的C++
变量,该变量定义并填充在一个C++
类中(从我的Objective-C++
类调用)。
我想将此对象存储在NSDictionary
中 - 或某种等效物。我显然不能简单地将std::vector<std::bitset<128> >
添加到 NSDictionary 中,因为它不是id
型。
所以我的问题是:我怎样才能实现相同的概念?如何将std::vector<std::bitset<128> >
存储在各种字典中?我可以以某种方式将矢量对象包装在id
类型中吗?即使它不是直接字典,我可以使用其他方法吗?我还需要它是可变的,所以我可以在运行时添加键/对象。
我见过std::map<std::string, std::string>
,但我不确定这是否是我要找的。我也没有找到任何关于它是可变的例子。
有没有人知道如何实现这一目标?
实际上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];
这也非常适合简单的结构。
您可以在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]
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- 在c++中获取两个大int,并将它们存储在数组中
- 在reactor中存储eventHandlers的最佳方式是什么