typedef ou using à la place d'une macro
Bonjour :D
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:
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:
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:
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 :calim2:
Merci pour votre aide.