„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie iteriere ich in C++ durch Struktur- und Klassenmitglieder?

Wie iteriere ich in C++ durch Struktur- und Klassenmitglieder?

Veröffentlicht am 02.11.2024
Durchsuche:227

 How to iterate through struct and class members in C  ?

Iterieren durch Struktur- und Klassenmitglieder

C bietet verschiedene Mechanismen zum Durchlaufen der Mitglieder von Strukturen und Klassen. Um dies zu erreichen, können Sie verschiedene Techniken anwenden.

Definieren der Struktur mit einem Makro:

Ein Ansatz besteht darin, das REFLECTABLE-Makro zu verwenden, wie im folgenden Beispiel gezeigt :

struct A
{
    REFLECTABLE
    (
        (int) a,
        (int) b,
        (int) c
    )
};

Mit diesem Makro können Sie bequem über die Felder iterieren und ihre Werte wie folgt drucken:

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);

Anpassen der Struktur als Fusion-Sequenz:

Eine andere Möglichkeit besteht darin, die Struktur als Boost.Fusion-Sequenz anzupassen. Betrachten Sie das folgende Beispiel:

struct A
{
    int a;
    int b;
    int c;
};

BOOST_FUSION_ADAPT_STRUCT
(
    A,
    (int, a)
    (int, b)
    (int, c)
)

Mit dieser Anpassung können Sie mit dem folgenden Code über die Felder iterieren:

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));
}

Diese Techniken ermöglichen Ihnen eine effektive Iteration durch Struktur- und Klassenmitglieder in C.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3