Я разрабатываю небольшую библиотеку отражений для учебных целей. Я хочу пройтись по всем полям некоторого класса С++. Есть гарантия, что этот класс реализует функцию reflect
. Полный пример такого класса:
struct some_class
{
char field1;
bool field2;
some_class()
: field1(0)
, field2(0)
{
}
};
template<class proc>
void reflect(proc& p, some_class& sc)
{
reflect(p, sc.field1, "field1");
reflect(p, sc.field2, "field2");
}
Я хочу просмотреть все поля этого класса и выполнить какое-либо действие для каждого поля. Например, я могу распечатать поле или сериализовать его.
Я думаю, мне нужно реализовать Visitor pattern
. Я тоже думаю, что Generic lambdas
(С++ 14) мне тоже поможет.
auto lambda = [](auto x, auto y) {return x + y;};
Я не знаю, как решить мою задачу. Жду любых советов.
Обратите внимание, что подпись reflect function
неизменна. Я не могу это изменить.
reflect function
является константой. Я не могу это изменить. - person David   schedule 19.04.2015REFLECTABLE macro
из этого примера. - person David   schedule 20.04.2015