Pull to refresh

Comments 6

Как же мне не хватает элементов рефлексии в крестах!
Чтобы не описаться где-нибудь в этой простыне
struct_mapping::reg(&Ocean::water_volume, "water_volume");
Полагаю это для самообразования, поэтому предлагаю копнуть какую-нибудь готовую либу, вроде nlohmann json, которая предоставляет очень интуитивный интерфейс, — там почти наверняка много шаблонной магии
UFO just landed and posted this here
Крутая библиотека!
Собираетесь ли ее развивать дальше? Было бы замечательно в нее добавить поддержку 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.

Sign up to leave a comment.

Articles