enum dont les champs sont des noms de type
Bonjour,
Aujourd'hui, en C++, j'aimerais faire quelque chose d'un peu foufou.
J'ai une template struct Test :
Code:
1 2 3 4 5
| template <typename...Ts>
struct Test
{
}; |
Je voudrais que pour chaque instance de Test, un enum soit créé à l'intérieur de la structure, avec comme champs le nom des types rentrés en template. Hum hum. Un exemple sera plus parlant.
Du coup, une instance comme ceci...
Code:
Test<chat,chien,cheval> test;
...créerait un enum comme ceci :
Code:
1 2 3 4 5 6
| enum
{
chat,
chien,
cheval
} |
L'objectif, c'est ensuite de faire une fonction template dans ma structure, qui me renverrait à quelle position se trouve le type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| template <typename...Ts>
struct Test
{
enum
{
chat,
chien,
cheval
}
template <typename T>
unsigned test()
{
// on récupère le nom de T, et avec ça on pioche dans l'enum
}
};
std::cout<<test.test<chien>(); // affiche 1, parce que chat(0) chien(1) cheval(2) |
J'arrive déjà à faire ça avec une unordered_map<std::type_index,unsigned> mais ça ne me convient pas trop, c'est très lent.