Здравствуйте, niXman, Вы писали:
Не мой комментарий, но я помню, что тоже обратил внимание на эти моменты, когда смотрел в код.
VTT>>1) большие (а в наше время не особо большие) данные молча криво обрабатываются?
X>не поняд...
Значения типа `size_t` (который может быть `uint64_t`) обрезаются до `uint32_t`
Если 8 байт для хранения нулевой дины кажется расточительным, надо смотреть на кодирование значения переменной длиной. Но есть шанс переместиться со 2-го места в середину списка в замерах скорости, к тем библиотекам, которые это уже делают.
Вообще тема длины строк и количества элементов в сериализуемых контейнерах в YAS не раскрыта. Как реагировать на строку длиной, например, 2^63?
VTT>>2) &string[0] — это реально стремно
X>иначе придется константность снимать с c_str(). какие еще варианты?
Для
string::data() в С++17 есть неконстантная перегрузка. Хорошо бы добавить защиту от пустых строк:
char* data(std::string& str) { return str.empty()? nullptr : &str[0]; }
Сейчас, конечно, всё работает и так, потому что устройство строки во всех 3-х стандартных библиотеках более-менее одинаково. Но кто знает, как оно будет в будущем.