Comments 6
Чтобы не описаться где-нибудь в этой простыне
struct_mapping::reg(&Ocean::water_volume, "water_volume");
Собираетесь ли ее развивать дальше? Было бы замечательно в нее добавить поддержку std::chrono::*.
И еще хотелось бы видеть возможность создавать несколько маппингов в разных частях программы, чтобы была возможность использовать для разных json.
Было бы замечательно в нее добавить поддержку std::chrono::*
планируется добавить возможность кастомной сериализации из строк в типы и наоборот.
И еще хотелось бы видеть возможность создавать несколько маппингов в разных частях программы, чтобы была возможность использовать для разных json.
если вопрос о запуске нескольких процедур отображения, то можно запустить map_json_to_struct с разными параметрами
map_json_to_struct(объект, json);
...
map_json_to_struct(другой объект, json для другого объекта);
...
map_json_to_struct(объект другого класса, json для объекта другого класса);
...
если вопрос о возможности перерегистрировать поля с заданием разных опций, то такого нет
Конечно всем не угодишь, но. Загружать в регистри правила мэппинга не слишком сложней, чем сразу написать функцию мэппинга, которая будет по нужным полям раскладывать нужные значения. И вероятность где-то облажаться примерно та же. Вот если бы можно было как расте или жаве - тогда да, но никто не знает, как это красиво сделать. Кроме того, регистри надо дергать на этапе инициализации, оно там что-то создает в памяти и хранит - и ради чего? Трудозатраты вполне сопоставимы. Поэтому мой велосипед выглядел как-то так:
Bar json2bar(QJsonObject const &v) {
return Bar{
.a=str(v["a"]),
.b=from_quint32(v["b"]),
.c=str2enum_class(v["c"])
};
}
Вообще, с именами полей - это C99 синтаксис, но g++ и шланг так умеют и в с++20 его затащили в стандарт плюсов. Фича называется designated initializers. По идее даже гарантируется RVO, если с++17.
Отображение данных в формате json на структуру c++ и обратно (работа над ошибками)