[英]C++ / Objective-C++ - How can I store a C++ variable in an NSDictionary?
我有一個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>
,但我不確定這是不是我要找的東西。 我也沒有發現任何可變的例子。
有誰知道如何實現這一目標?
實際上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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.