Rapidjson. Чего хочет SetString и как ему угодить?

151
28 июля 2019, 08:00

Использую Rapidjson. Возникла нужда изменять строку.

string temp;
temp = doc["inventory"]["cells"][i]["title"].GetString();

Вполне себе работает.

doc["inventory"]["cells"][i]["title"].SetString("empty");

Тоже работает;

doc["inventory"]["cells"][i]["title"].SetString(temp);

не работает. Отсутствуют экземпляры перегруженная функция.

temp.c_str() 

Тоже не жуёт. указание длины тоже не помогает. Не помогает также запихать ему из того же документа GetString() какой-нибудь. Также не помогло указание длины строки (есть такая перегрузка). А очень надо.

Answer 1
string temp;
const char * str = &temp[0];
doc["inventory"]["cells"][i]["title"].SetString(str, doc.GetAllocator());

Вроде нашёл решение. Нужно вызвать аллокатор, чтобы документ перестроился в памяти. Запихнуть голую строку ему всё же не удалось, только const char *str;

Answer 2
const char *s = &temp[0];
doc["inventory"]["cells"][i]["title"].SetString(s,temp.size());

Вот так прожевало. Фух.

Рано радовался. В самом документе это не сохраняется. Как только *s уходит из области видимости - так сразу изменения обнуляются. Это логично, ведь я дал ему ссылку на переменную s, а она исчезла. То есть, он не копирует, а просто подставляет ссылку.

Вопрос остаётся. Каким образом можно изменить строку, чтобы это сохранилось в документе rapidjson? С интами, по крайней мере, никаких проблем нет.

READ ALSO
На чем сделан интерфейс в программе Kaspersky antivirus?

На чем сделан интерфейс в программе Kaspersky antivirus?

Хочу вас спросить, я недавно увидел на википедии, что Kaspersky написан на c++, скажите пожалуйста, как они создали интерфейс? WinApi, Qt, или что-то другое?

126
Вопрос по сериализации в Java

Вопрос по сериализации в Java

В классе ObjectInput есть метод available(), который, как написано в java docs, возвращает количество байт, доступных для чтения без блокировкиВ классе FileInputStream...

158
Не отображается иконка при свайпе CardView

Не отображается иконка при свайпе CardView

При свайпе вправо не отображается иконка, хотя при свайпе влево она естьЯ смог пофиксить это, деля итоговое число на 10, но иконка получается...

151
gradle сборка зависимостей отдельно

gradle сборка зависимостей отдельно

Есть проект, который использует много библиотекЯ хочу передавать его на другой ПК после каждого обновления

155