Bonjour,

Aujourd'hui, en C++, j'aimerais faire quelque chose d'un peu foufou.

J'ai une template struct Test :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
Test<chat,chien,cheval> test;
...créerait un enum comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.