簡體   English   中英

C ++ / Objective-C ++ - 如何在NSDictionary中存儲C ++變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM