Проблема в разпаковке msgpack об'екта
есть такой msgpack об'єкт - ["a", [[9,1980,11503,2.65,-1,0,0,null,0,0,0,0,0]]].
Я пробую розпаковать первий елемент(ошибок нет, дальше читайте комантарии):
int PacketAnalyzer(msgpack::object& obj) {
std::string first;
obj.via.array.ptr[0].convert(first);
std::cout << "First element: " << first << std::endl;
//Тут мне надо розпаковать Вторую часть об'екта с такой структурой [[]].
//Но програма заканчиваеться аварийно
std::vector<msgpack::object> outer_array;
obj.via.array.ptr[1].convert(outer_array);
std::vector<msgpack::object> inner_array;
outer_array[0].convert(inner_array);
int value;
inner_array[0].convert(value);
cout << value << endl;
return 0;
}
Ответы (1 шт):
Вызов obj.via.array.ptr[1].convert(outer_array); обращается к методу
msgpack::enable_if< !msgpack::is_array< T >::value
&&!msgpack::is_pointer< T >::value, T & >::type
msgpack::object::convert(T & v) const
который использует перегрузку оператора operator>>(msgpack::object const & o, T & v ) для типа T=std::vector<msgpack::object>. Если такового нет, by design ошибок при компиляции не будет, метод вызовет исключение во время исполнения msgpack::type_error. Это часть идеологии msgpack, т.к. библиотека часто используется из кода на интерпретирующих языках.
Пишите юнит-тест где все стадии кроме разборки можно исключить. А здесь, похоже, логическая ошибка, мне не известно определение для вектора msgpack.