Использую 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() какой-нибудь.
Также не помогло указание длины строки (есть такая перегрузка).
А очень надо.
string temp;
const char * str = &temp[0];
doc["inventory"]["cells"][i]["title"].SetString(str, doc.GetAllocator());
Вроде нашёл решение. Нужно вызвать аллокатор, чтобы документ перестроился в памяти.
Запихнуть голую строку ему всё же не удалось, только const char *str;
const char *s = &temp[0];
doc["inventory"]["cells"][i]["title"].SetString(s,temp.size());
Вот так прожевало. Фух.
Рано радовался. В самом документе это не сохраняется.
Как только *s уходит из области видимости - так сразу изменения обнуляются.
Это логично, ведь я дал ему ссылку на переменную s, а она исчезла. То есть, он не копирует, а просто подставляет ссылку.
Вопрос остаётся. Каким образом можно изменить строку, чтобы это сохранилось в документе rapidjson? С интами, по крайней мере, никаких проблем нет.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости