У меня есть библиотека (обертка вокруг nlohmann / json), которая позволяет мне десериализовать из JSON:
struct MyStruct {
int propertyA;
std::string propertyB;
std::vector<int> propertyC;
}
void from_json(const JSON::Node& json, MyStruct& s)
{
json_get(s.propertyA, "propertyA", json);
json_get(s.propertyB, "propertyB", json);
json_get(s.propertyC, "propertyC", json);
}
Как вы можете видеть, в этих определениях много котельной пластины , Я использую инфраструктуру ECS, которая содержит сотни компонентов, которые я хотел бы десериализовать. Я надеюсь упростить его с помощью макроса, такого как:
struct MyStruct {
int propertyA;
std::string propertyB;
std::vector<int> propertyC;
JSON(MyStruct, propertyA, propertyB, propertyC);
};
}
Мне известен подход oldschool __VA_ARGS__
с ручным повторением макроса N раз, но я был в надежде избежать этого с помощью более общего c / современного метода.
Возможно ли это с помощью шаблонов variadi c? Есть ли лучший способ получить что-то вроде сахара syntacti c для этого? Я использую компилятор C ++ 17.