Itération à travers les membres de structure et de classe
C fournit divers mécanismes pour parcourir les membres des structures et des classes. Pour y parvenir, vous pouvez utiliser plusieurs techniques.
Définir la structure avec une macro :
Une approche consiste à utiliser la macro REFLECTABLE, comme le montre l'exemple suivant. :
struct A
{
REFLECTABLE
(
(int) a,
(int) b,
(int) c
)
};
En utilisant cette macro, vous pouvez facilement parcourir les champs et imprimer leurs valeurs comme suit :
struct print_visitor
{
template
void operator()(FieldData f)
{
std::cout
void print_fields(T & x)
{
visit_each(x, print_visitor());
}
A x;
print_fields(x);
Adaptation de la structure en tant que séquence de fusion :
Une autre option consiste à adapter la structure en tant que séquence Boost.Fusion. Prenons l'exemple suivant :
struct A
{
int a;
int b;
int c;
};
BOOST_FUSION_ADAPT_STRUCT
(
A,
(int, a)
(int, b)
(int, c)
)
Avec cette adaptation, vous pouvez parcourir les champs en utilisant le code suivant :
struct print_visitor
{
template
void operator()(Index, C & c)
{
std::cout ::call()
(c)
void print_fields(C & c)
{
typedef boost::mpl::range_c::type::value> range;
boost::mpl::for_each(boost::bind(print_visitor(), boost::ref(c), _1));
}
Ces techniques vous permettent de parcourir efficacement les membres de la structure et de la classe en C .
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3