C++ / Objective-C++ - Как я могу сохранить переменную C++ в 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>
, но я не уверен, что это то, что я ищу. Я также не нашел никаких примеров того, что это изменчиво.
У кого-нибудь есть идеи, как этого добиться?
2 ответа
На самом деле NSValue
кажется, решение. Совет Таума верен в некоторых случаях (когда вы храните свои объекты где-то и уверены, что указатели работают). Если вы создали какой-то объект и срок его службы ограничен, но вам нужно продвинуть этот объект дальше, используйте другой 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
"D.
Магазин с:
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]