Я работаю над телом кода, который имеет дело с пользовательской реализацией String, а не с std :: string (длинная история, но по разным причинам это должно быть использовано), которое я будет упоминаться как «String» здесь.Распаковка msgpack на произвольный объект без msgpack_define
Я смог легко упаковать строку без проблем, используя «сырой» тип, чтобы упаковать необработанные байты и размер, но у меня проблемы с его распаковкой.
Я смог вручную распаковать его, как показано ниже.
// before this I've unpacked to the point where the following object has the string
msgpack::object_kv& kv = obj.via.map.ptr[0];
// kv.key == the String I want
String key = String(key.via.raw.ptr, key.via.raw.size); // this works
Но я хочу использовать встроенный >> оператор или функцию шаблона .as и не смог его управлять. У меня нет доступа для изменения класса String, чтобы добавить функцию msgpack_unpack или добавить MSGPACK_DEFINE
Я попытался создать структуру и предоставить ей функцию msgpack_unpack, но, по-видимому, она вызывает ее с помощью msgpack :: object :: implicit_type, который мой компилятор отвечает
error: 'struct msgpack::object::implicit_type' is private
И тогда я не могу понять, какой-либо способ получить msgpack :: объект из «implicit_type» объекта.
Любые идеи?
Возможно, это может выполнить задание 'String & operator >> (String, yourtype)' реализовано как функция вместо члена класса – hetepeperfan
После того, как я еще раз посмотрел, я наконец понял, почему мои попытки оператора >> раньше не работали , Я отвечу на вопрос с полным результатом. – Zeroshade