Struct-Member zur Laufzeit holen?



  • Hallo zusammen!
    Angenommen, ich habe eine Funktion, der als Parameter ein String übergeben wird (oder besser ein Pointer auf nen String), der den Namen eines Struktur-Members enthält. Kann ich jetzt mit diesem String auf den gleichnamigen Member einer Structur zugreifen?
    Verwirrt 😕 ? Hier ein Beispiel:

    typedef struct
    {
      short var1;
      short var2;
    }Struct1;
    
    ...
    // varName = "var2";
    void Func(char *varName, Struct1 str1)
    {
      short var = str1./* Hier brauche ich jetzt den Member-Namen von varName, also var2 */
    }
    

    Funktioniert das irgendwie?





  • Danke Krösus,
    aber ich glaube, das ist nicht ganz das, was ich wollte. Wenn ich deinen Code richtig verstanden habe, so lassen sich zur Laufzeit neue Datenfelder der drei Typen char, char* und int in die Structur erzeugen. Ich allerdings möchte keine neuen erzeugen, sondern auf vorhandene zugreifen! Grund: ich habe drei Strukturen die zusammen über 100 Datenfelder enthalten. Die einfachste Art wäre nun, für jedes Datenfeld 1 Zugriffsfunktion zu schreiben, was über 100 Funktionen zur Folge hätte 😞
    Schöner wäre es, wenn ich nur 1 Funktion hätte, der ich den Namen des Datenfeldes als 'String (char*)' übergeben würde und dann mit diesem Namen auf das entsprechende Datenfeld zugreifen könnte 🙄

    Geht das?



  • P.S. Kann aber auch sein, ich hab deinen Code nicht richtig verstanden, was mir sehr peinlich wäre und ich mich dafür schon jetzt entschuldigen möchte!! 🙄



  • Nach dem Kompilieren sind die Namen aller (struct-Member-)variablen futsch, es existieren nur noch Adressen und Speicheroffsets, daher kann man zur Laufzeit nicht mehr per Name auf Variablen zugreifen (und so habe ich Deinen Wunsch verstanden) - es sei denn, man treibt eben den von mir in der anderen Diskussion beschriebenen Programmieraufwand.
    Gib bitte etwas mehr von Deinem Quellcode her, damit das Problem klarer wird.
    MfG, Krösus


Anmelden zum Antworten