Как обойти все поля класса С++?

Я разрабатываю небольшую библиотеку отражений для учебных целей. Я хочу пройтись по всем полям некоторого класса С++. Есть гарантия, что этот класс реализует функцию 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 неизменна. Я не могу это изменить.


person David    schedule 19.04.2015    source источник
comment
@nestedloop, нет, не так. Подпись reflect function является константой. Я не могу это изменить.   -  person David    schedule 19.04.2015
comment
@ Барри, почему ты решил, что мой вопрос дублируется?   -  person David    schedule 19.04.2015
comment
Потому что вы хотите знать, как обойти все поля некоторого класса C++ — это именно то, о чем был задан этот вопрос и на что есть ответы?   -  person Barry    schedule 19.04.2015
comment
@ Барри, но мой случай другой. Я не могу использовать REFLECTABLE macro из этого примера.   -  person David    schedule 20.04.2015