Bonjour
J'ai défini une classe dont l'instantiation est assez verbeuse.
Pour faciliter son usage et sa lisibilité j'utilise une macro, mais je souhaiterais plutôt utiliser un typedef ou un using.
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<class C, typename T, T C::*P> struct my_trait { typedef C class_type; typedef T member_type; static constexpr T C::* offset = P; }; #define MY_TRAIT(table, field) my_trait<table, decltype(table::field), &table::field>L'usage de la macro ci-dessus est nettement plus lisible, mais j'aimerais utiliser quelque chose comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 struct my_class { std::string m_Name; //... }; ... typename my_trait<my_class, decltype(my_class::m_Name), &my_class::m_Name>::member_type name;//un peu lourd ... typename MY_TRAIT(my_class, m_Name)::member_type name;//mieux, mais c'est une macro
... et je ne trouve pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template<class C> using my_name = my_trait<C, decltype(C::m_Name), &C::m_Name>;//ok, mais comment "templatiser" m_Name ? template<class C, ??? M> using my_member = my_trait<C, decltype(C::M), &C::M>;//euh... comment ???
Merci pour votre aide.
Partager