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]
Другие вопросы по тегам