using tr2 :: direct_bases obtient le nième élément du résultat

struct T1 {}; struct T2: T1 {}; typedef tr2::direct_bases::type NEW_TYPE ; 

devrait retourner mon quelque chose comme un touple aux types de bases. Comment puis-je obtenir le nième élément de cette __reflection_typelist . Je recherche quelque chose comme tuple_element pour la liste de reflection.

Vous pouvez utiliser cette métafonction simple pour transformer la liste de types en une liste std::tuple :

 #include  #include  template struct dbc_as_tuple { }; template struct dbc_as_tuple> { typedef std::tuple type; }; 

À ce stade, vous pouvez travailler avec elle comme vous le feriez normalement avec un tuple. Par exemple, voici comment récupérer des éléments de la liste de types:

 struct A {}; struct B {}; struct C : A, B {}; int main() { using namespace std; using direct_base_classes = dbc_as_tuple::type>::type; using first = tuple_element<0, direct_base_classes>::type; using second = tuple_element<1, direct_base_classes>::type; static_assert(is_same::value, "Error!"); // Will not fire static_assert(is_same::value, "Error!"); // Will not fire } 

Écrivez votre propre?

 template  struct get; template  struct get, N> { typedef typename get, N - 1>::type type; }; template  struct get, 0> { typedef T type; }; 

Ou même en utilisant first / next :

 template  struct get { typedef typename get::type type; }; template  struct get { typedef typename R::first::type type; }; 

À ce stade, je dirais que le code source est la meilleure documentation.