Auf Member per Klasse UND Enum zugreifen



  • Hallo!

    Sagen wir ich habe folgende Klasse:

    enum Member {
        Name,
        Age,
        Gender
    };
    
    class Person {
    private:
        string mName;
        int    mAge;
        string mGender;
    
    public:
        string getName() { return mName; }
        void setName(string name) { mName = name; }
    
        int getAge() { return mAge; }
        void setAge(int age) { mAge = age; }
    
        string getGender() { return mGender; }
        void setGender(string gender) { mGender = gender; }
    };
    

    Ist nur eine Skizze (habe nicht auf const, Referenzen geachtet etc.).

    Ich kann jetzt natürlich alle Member mit den gettern/settern abrufen und ändern. Jetzt will ich aber noch was: Auf die Member über einen Typ Enum (hier: Member) zugreifen.
    Sprich ich will, dass diese 2 Dinge gehen:

    Person p;
    string name = p.getName();
    name        = p.getMember(Member::Name);
    

    Ich könnte natürlich zusätzlich zu den individuellen Member eine map nehmen, aber dann sind ja 1. die Daten redundant und 2. welchen Typ sollte man für die values der map nehmen?

    Hat jemand eine Idee wie man sowas lösen könnte?


  • Mod

    Um dir optimal helfen zu können, musst du erst einmal erklären, warum du diese Sprachvergewaltigung wünscht. Das wird wohl kaum mit der gewünschten Funktionalität des Programms zusammen hängen, oder?



  • Weil ich in meinem GUI Code sonst gigantische switches in dieser Form habe:

    switch(role) {
       case 0:
           mPerson.setName( value.toString() );
           break;
       case 1:
           mPerson.setAge( value.toInt() );
           break;
    }
    usw usw.
    


  • Pack in die GUI die Map rein. Der Wert ist eine Funktionspointer o.ä.
    Eine Beispielfunktion sähe so aus:

    void set_name(Person &person, Value value)
    {
       person.setName( value.toString() );
    }
    

Anmelden zum Antworten