Bonjour à tous,

J'ai deux enums comme ceci :
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
enum E_COL
{
   E_COL_0,
   E_COL_1,
   E_COL_2;
   E_COL_COUNT
};
 
enum E_ROW
{
   E_ROW_0,
   E_ROW_1,
   E_ROW_2;
   E_ROW_COUNT
};
Ainsi qu'une classe template comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template<E_COL COL, E_ROW ROW>
class CColRowHelper
{
	enum { activated = false };
        static void DoSomething() {}
};
Lorsque je veux activer un point, il me faut spécialiser cette classe template. Par exemple, la colonne 1 avec la row 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template<> CColRowHelper<E_COL_1, E_ROW_2>
{
	enum { activated = true };
        static void DoSomething() { /* it does something */ }
};
A l'initialisation, toute association colonne / row étant marquée comme "activée", il faut que j'exécute la méthode "DoSomething()"

Pour le moment, je ne vois qu'une solution, mais pas mal contraignante, qui serait de répertorier toutes les associations possibles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
if(CColRowHelper<E_COL_0, E_ROW_0>::activated)
    CColRowHelper<E_COL_0, E_ROW_0>::DoSomething()
 
if(CColRowHelper<E_COL_0, E_ROW_1>::activated)
    CColRowHelper<E_COL_0, E_ROW_1>::DoSomething()
N'y aurait-il pas un moyen de faire quelque chose de ce style ? :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
for(int col = 0; col < E_COL_COUNT; ++col)
    for(int row = 0; row < E_ROW_COUNT; ++row)
        if(CColRowHelper<col, row>::activated)
            CColRowHelper<col, row>::DoSomething();
Merci à vous,
A bientôt