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.
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>
Exemple:
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
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
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 ???
... et je ne trouve pas
Merci pour votre aide.