TMP: jak napisać kod szablonu, który przekształca dowolną strukturę w krotkę?

Czy możliwe jest użycie szablonowego programowania w celu przekształcenia dowolnej struktury lub klasy w krotkę?

Na przykład:

struct Foo
{
  char         c;
  int          i;
  std::string  s;
};

typedef std::tuple< char, int, std::string >  Foo_Tuple;

Byłoby miło mieć jakiś kod szablonu, który automatycznie wygeneruje Foo_Tuple dla mnie.

ODPOWIEDŹ

Jest to przesada w przypadku tak prostego przypadku, ale w przypadku bardziej skomplikowanych przypadków (np. ORM lub w dowolnym momencie trzeba napisać dużo kodu płyty kotłowej, a zwykły szablon lub makro jest niewystarczające do wykonania zadania),Zwiększ lustro wygląda na to, że może być niezwykle przydatny. Wbiłem trochę w Boost Mirror: podstawowe funkcje odbicia (w Mirror and Puddle) nie są trudne do zrozumienia, są dość łatwe do skonfigurowania i wydają się być dość obszerne (mogą obsługiwać wiele konstrukcji, w tym C ++ 11 klasy enum, itp ...). Uważam, że ta podstawowa funkcjonalność jest więcej niż wystarczająca - mogę po prostu użyć MACROS w takim stopniu, w jakim chcę ujawnić moje klasy w Reflection (tak, że nie muszę pisać kodu płyty kotłowej). Generatory Factory również wydają się być bardzo potężne (z takimi samymi ustawieniami początkowymi makr, można zamienić dowolny generator fabryczny, który lubisz na JSON, SOCI lub strumień itp.), Ale ma większą krzywą uczenia się / ustawienia, jeśli chcesz napisać własne generatory fabryczne. Ostatnie kilka notatek: z kilkoma drobnymi poprawkami udało mi się uruchomić go z C ++ 11 na gcc 4.7.2; również dokumentacja została dobrze odtleniona i wydaje się, że istnieje więcej niż wystarczająca liczba przykładów, aby szybko działać.

questionAnswers(1)

yourAnswerToTheQuestion