Pull to refresh
3
0
Send message
Было бы замечательно в нее добавить поддержку std::chrono::*

планируется добавить возможность кастомной сериализации из строк в типы и наоборот.


И еще хотелось бы видеть возможность создавать несколько маппингов в разных частях программы, чтобы была возможность использовать для разных json.

если вопрос о запуске нескольких процедур отображения, то можно запустить map_json_to_struct с разными параметрами


map_json_to_struct(объект, json);
...
map_json_to_struct(другой объект, json для другого объекта);
...
map_json_to_struct(объект другого класса, json для объекта другого класса);
...

если вопрос о возможности перерегистрировать поля с заданием разных опций, то такого нет

Да, работает только со структурами, определенными через макросы. Для уже готовой структуры работать не будет и stl контейнеры в качестве полей использовать нельзя.


Определение структуры и ее парсера не совсем смешаны. Именно парсер json — это отдельная
сущность, которая со структурой связана через набор колбэков и функцию map_json_to_struct. Сам парсер можно и заменить. Чего там нет — это валидации и значений по умолчанию. Однако добавить их — это хорошая идея, спасибо.

Основная задача была в том, чтобы сделать загрузку конфигурации и начального состояния приложения из json простой для пользователя. Хотелось, чтобы использование сводилось к определению структуры без написания дополнительного кода для самого процесса. Отсюда и нет необходимости десериализовывать уже существующие классы.


В json интересными для отображения являются только логический тип, число, строка, объект и массив. Поэтому в структуре требуется существование такого же ограниченного набора типов. Использовать, например, std::list просто нет необходимости, потому что для него в json нет соответствия. Сторонние решения, которые я видел, требуют написания дополнительного кода, который связывает имена членов класса с именами json (от этого все равно никуда не уйти). Макросы позволяют убрать эту специфику за них. Сами макросы здесь ничего не "считают", они просто подставляют имена (полей и структур).


Да, от с++17 используется мало. Но отказавшись от static inline, пришлось бы добавить cpp файлы. А if constexpr заменилось бы на значительно более многословные конструкции.


Слишком медленно. std::function<>, в общем виде, достаточно медленный механизм, особенно если его использовать для каждого загружаемого поля.

согласен. мы работаем над этим

дефайнится она для использования в отладочных сообщениях. Но вы правы, оно лишнее, и алиас будет к месту.

Information

Rating
Does not participate
Registered
Activity