Désactiver une portion de code
Bonjour à tous,
D'une manière statique, je définis des données qui seront activées ou non :
Code:
1 2 3 4 5 6 7 8
| template<class T>
class DataHelper
{
enum { activated = false; }
};
template<> class DataHelper<Data1> { enum { activated = true }; };
template<> class DataHelper<Data2> { enum { activated = true }; };
template<> class DataHelper<Data4> { enum { activated = true }; }; |
Puis des opérations sur ces données, pouvant être activées ou non :
Code:
1 2 3 4 5 6 7 8 9
| template<class T>
class OPHelper
{
enum { activated = false; }
};
template<> class OPHelper<OP1> { enum { activated = true }; };
template<> class OPHelper<OP2> { enum { activated = true }; };
template<> class OPHelper<OP3> { enum { activated = true }; };
template<> class OPHelper<OP4> { enum { activated = true }; }; |
Chaque OPx a besoin de Datax pour fonctionner. Une opération peut-être activée ou non, mais si elle est activée, il lui faut une cohérence de l'activation de la donnée correspondante.
Dans ce cas, j'aimerais lancer une erreur de compilation, car OP3 a été activée, mais pas Data3.
Comment puis-je m'y prendre ? Avec du static_assert ?
Car je ne peux pas faire
Code:
static_assert(OPHelper<OP3>::activated && DataHelper<Data3>::activated, "error")
Etant donné que ce ne serait pas une erreur de désactiver la fonctionnalité..
Où alors est-ce qu'il y aurait ce genre d'équivalent ?
Code:
1 2 3
| #if OPHelper<OP3>::activated
static_assert(DataHelper<Data3>::activated, "OP3 activated but not Data3");
#endif |
Merci pour vos réponses :)
A bientôt