Announcement

Collapse
No announcement yet.

Klassenfelder per Name an eine Funktion übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klassenfelder per Name an eine Funktion übergeben

    Hallo Leute,

    ich glaube ich stehe gerade etwas auf dem Schlauch...


    Ich habe eine Klasse mit einigen Variablen und ein Array:

    Code:
    class Ttest{
    public:
      int MyInt;
      double MyDouble;
     ....
    };
    
    Ttest testarray[100];
    in meinem Programm kommt es nun öfter vor, dass bei allen bzw. einer bestimmten Auswahl von Arrayeinträgen eine Variable gesetzt werden soll. Also ungefähr so:
    Code:
    for(int i = 0 ; i< 100 ; i++)
      testarray[i].MyInt = 123;
    for(int i = 0 ; i< 100 ; i++)
      testarray[i].MyDouble = 123.321;
    Da die Auswahllogik in Wirklichkeit etwas komplexer ist, als von 0 bis 99 zu zählen, würde ich diesen Part gerne in eine Funktion auslagern. Also zB. so:
    Code:
    void SetMyInt(int x) {
      for(int i = 0 ; i< 100 ; i++)
        testarray[i].MyInt = x;
    }
    void SetMyDouble(int x) {
      for(int i = 0 ; i< 100 ; i++)
        testarray[i].MyDouble = x;
    }
    ....
    main(){
      SetMyInt(123);
      SetMyDouble(123.321);
    }
    Da meine Klasse aber hunderte von Member-Variablen besitzt, müsste ich für jede eine solche Set-Funktion schreiben.
    Gibt es stattdessen eine Möglichkeit das in eine Funktion zu packen?
    Also ungefähr so:
    Code:
    template<typename T>
    SetMember(const string &VarByName,T Wert) {   // egal ob per string oder irgendwie anders
      for(int i = 0 ; i< 100 ; i++)
        T &VarRef = GetMemberRefByName(testarray[i],VarByName);   // so was in der Art???
        VarRef = Wert;
    }
    ...
    main() {
        SetMember("MyInt",123);
        SetMember("MyDouble",123.321);
    }
    ???

    Danke für Eure Hilfe.

  • #2
    Da meine Klasse aber hunderte von Member-Variablen besitzt,
    Werde das Gefühl nicht los, dass man das einfacher machen könnte Vector? Map?

    Dann mache die Variablen public und greife ohen Setter/Getter darauf zu
    Christian

    Comment


    • #3
      Mir kommt eine Klasse mit 100 Feldern schon spanisch vor

      Comment


      • #4
        ... also die Klasse repräsentiert ein per COM-Port angeschlossenes Gerät und sieht in etwa so aus:

        Code:
        class TDevice{
          public:
          string DeviceName;
          int SerialNumber;
          double FirmwareVersion;
          bool SystemOnline;
          int Solltemperatur;
          int AktuellGemesseneTemperatur;
          double TemperaturAbleichFaktor;
          int MaximalStrom;
          double AktuellGemesseneEingangsspannung;
          bool CalibrationActive;
          int Status;
          int WorkingHours;
          int MaximalLeistung;
          ....
        }
        Ein Array (bzw. Vector,Map) aus der Klasse "TDevice" fasst nun mehrere angeschlossene Geräte zusammen. (Die Daten der Klasse werden asynchron per RS232 Kommunikation pro Gerät auf dem aktuellen Stand gehalten.)
        Die Aufgabe des Hauptprogramms ist es nun einmal für alle Geräte zB. die Solltemperatur auf den gleichen Wert zu setzen, ein anderes mal den MaximalStrom zu setzen..usw.

        Comment


        • #5
          Aso Na wenn Du gezwungen wirst das so zu benutzen, dann kannst Du ja auch nichts dafür. Allerdings kann man das ganze z.B. durchs Adapter Pattern in benutzbare kleinere Klassen überführen. Vielleicht löst sich ja dann Dein Problem mit dem Zugriff von allein

          Comment


          • #6
            Originally posted by fanderlf View Post
            Aso Na wenn Du gezwungen wirst das so zu benutzen, dann kannst Du ja auch nichts dafür. Allerdings kann man das ganze z.B. durchs Adapter Pattern in benutzbare kleinere Klassen überführen. Vielleicht löst sich ja dann Dein Problem mit dem Zugriff von allein
            Den Grad der Komplexität erhöhen?
            Christian

            Comment

            Working...
            X