Verschachtelte Structs generisch verarbeiten



  • Muss nochmal zu meiner Frage zurückkommen.

    Gibt es eine Möglichkeit bei ineinander geschachtelten Structs auf die einzelnen Elemente "generisch" zuzugreifen, um mit ihnen zu operieren?

    Beispiel

    struct A {
      int a;
      int b;
      // etc.
    };
    
    struct B {
      int a;
      A b;
      // etc.
    };
    

    Sobald ich zB in Struct A ein Element hinzufüge, muss ich im weiteren Code extra Zeilen schreiben (Copy and Paste) die das neu hinzugefügte Element bearbeiten.

    Hintergrund

    Es geht um die mx-Funktionen in Matlab, mit denen kommuniziert werden soll. Sobald sich die Structs in C++ ändern, muss der Code wieder angepasst werden.

    Ich vermute RTTI ist nicht der richtige Weg, wie sieht es mit einer Lösung zur Compilezeit aus, um durch die verschachtelten Strukturen "generisch" durchzugehen?



  • Mit dem Makro offsetof könntest Du Dir ein Array bauen, über das Du iterierst. Sind dann zwar immer noch zwei Stellen, aber die können nah beieinander stehen.

    Mfg Martin



  • Wenn ich offsetof richtig verstanden habe, muss ich damit jeden Offset einzeln ermitteln, also eine Änderung in einer der Strukturen erfordert Anpassung der Offsetberechnungen. 😞



  • Man kann mit Boost Fusion Strukturen so definieren, dass man über deren Elemente iterieren kann. Vielleicht suchst du genau das.



  • TyRoXx schrieb:

    Man kann mit Boost Fusion Strukturen so definieren, dass man über deren Elemente iterieren kann. Vielleicht suchst du genau das.

    Boost Fusion sieht interessant aus. Allerdings müssten dafür alle verschachtelten Strukturen in das entsprechende Format umgewandelt werden. Aktuell sind es einige Duzend verschachtelte Strukturen, weshalb ich versuchen werde, diese zu parsen (das Header-File) und die Boost Fusion Structs automatisch in ein Header zu schreiben.

    Gibts eine Alternative zum Parsen der Structs, ohne aufwendig ein eigenes Modul via Regex zu schreiben?

    😕


Anmelden zum Antworten