Czy można użyć szablonu meta-programowania do konwersji dowolnej struktury lub klasy na krotkę?TMP: jak napisać kod szablonu, który przekształca dowolną strukturę 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 wygeneruje Foo_Tuple automagicznie dla mnie.
ODPOWIEDŹ
To jest przesadą dla tak prostej sprawy, ale w przypadku bardziej skomplikowanych przypadkach (np ORM lub dowolnym czasie trzeba napisać dużo kodu kocioł-płyty, a jedynie szablon lub makro jest niewystarczające do wykonania zadania), Boost Mirror wygląda na to, że może być bardzo użyteczny. Zagłębiłem się w Boost Mirror nieco bardziej: podstawowa funkcja odbicia (w Mirror i Puddle) nie jest trudna do zrozumienia, jest dość łatwa do skonfigurowania i wydaje się dość obszerna (potrafi obsłużyć wiele konstrukcji, w tym C++ 11 wyliczanie klas, itp.). Uważam, że ta podstawowa funkcjonalność jest więcej niż wystarczająca - mogę po prostu użyć MAKROSów do tego stopnia, że chcę ujawnić moje klasy Reflection (tak, że nie muszę pisać kodu płyty kotła). Generatory Factory również wydają się być bardzo potężne (z tymi samymi początkowymi ustawieniami makr, możesz zamienić dowolny generator fabryczny, który chcesz wyprowadzić JSON, SOCI lub strumień itp.), Ale ma on większą krzywą uczenia się/konfiguracji, jeśli chcesz napisać własne generatory fabryczne. Jedna ostatnia para notatek: z kilkoma drobnymi zmianami, byłem w stanie zmusić go do pracy z C++ 11 na gcc 4.7.2; również dokumentacja była dobrze doxygenated i wydaje się, że więcej niż wystarczające przykłady, aby szybko iść.
'std :: krotka' hehe –
Pubby
wiem będę głośno skazany za sugestię, ale myślę, że w tym przypadku 'reinterpret_cast' będzie działać na większości platform. –
@JamesBrock Boo! Syk! [Twoja sugestia jest zła i powinieneś czuć się źle] (http://www.youtube.com/watch?v=jG2KMkQLZmI)! –