J'utilise la bibliothèque de fusion boost pour lire tous les membres d'une structure. Je crois que boost::fusion::extension::struct_member_name<MembersList, Index::value>::call()
donne déjà le nom du membre. Mais existe-t-il un moyen d'obtenir le nom en dehors de cette structure sans avoir besoin de passer un autre paramètre à la fonction autre que member_value?Comment obtenir le nom de membre de l'élément spécifique en utilisant boost fusion
template <typename MembersList>
struct Struct
{
Struct(const MembersList& members) : mMembers(members)
{
}
template <typename Index>
void operator() (Index idx) const
{
std::string field_name = boost::fusion::extension::struct_member_name<MembersList, Index::value>::call();
const auto& member_value = boost::fusion::at<Index>(mMembers);
getName(member_value); // function that returns the name of member_value
}
};
Disons que le struct nous traitons est défini comme ci-dessous et je pourrais vous avoir la fonction getName
pour retourner une chaîne soit « valeur » « nom » ou.
BOOST_FUSION_DEFINE_STRUCT(
(NameSpace),
Members,
(string, name)
(int, value)
)
Edit:
Est-il possible que je pourrais mettre en place la structure que je peux accéder à la variable field_name
extérieur? Peut-être avoir quelque chose comme
template <typename MembersList>
struct Struct
{
std::string field_name;
template <typename Index>
void operator() (Index idx) const
{
field_name = boost::fusion::extension::struct_member_name<MembersList, Index::value>::call();
}
std::string getName(){
return field_name;
}
};
void someFunction() {
std::string name = getName();
}
Mais au bon format?
Merci!
Je m'attends à recevoir une réponse solide maintenant que cela n'a pas été accepté :) Vous pouvez faire _it_ comme je l'ai esquissé, mais je ne répondrais pas à la question, _neither_ suis-je d'humeur à l'implémenter? – sehe
quelque chose de vraiment simple et direct. Comme il n'y a pas d'autres réponses, je suppose qu'il n'y a pas de solution simple à cela, alors j'ai accepté de nouveau votre réponse. Merci. – XTT