Hallo zusammen,
folgende Ausgangssituation: Ich habe einen Struct, der durch eine Bibliothek aktualisiert wird. Nun möchte ich herausfinden ob sich ein beliebiger Member durch diese Aktualisierung verändert hat. Also definere ich einen zweiten Struct gleichen Typs und kopiere vor der Aktualisierung den aktuellen Struct hinein.
Das Ganze schaut als Beispiel so aus:
Nun möchte ich eine Funktion erstellen, die als Parameter einen beliebigen Member aus dem Struct "actData" aufnimmt und ihn mit dem entsprechenden Member des Structs "prevData" vergleicht.
Ich möchte die Funktion ja universal halten und deshalb einen beliebigen Member angeben können. Zumal bei Erweiterung des ganzen auch noch andere Member hinzu kommen könnten.
ich bin gespannt auf andere Vorschläge.
Aber so rein aus dem Bauch: Ein Pointer auf actData.connect_flag zeigt wo anders hin als ein pointer auf prevData.connect_flag, also müsstest du deiner Funktion zwei Pointer übergeben.
mit einem Template ... nur das Member übergeben und in der Funktion dann auf beide structs abfragen ... mal beim @combie anklopfen ... oder googeln.
Ich habe folgende Krücke, die funktioniert:
Ich kopiere das Struct "actData" in ein Array, hole mir per offsetof den Array-Index des jeweiligen Member und lese ihn dann aus... funktioniert tadellos - ABER das muss doch irgendwie eleganter gehen
Was meinst du damit?
Auf die Struktur selbst bzw. deren Aktualisierung habe ich keinen Einfluss, die wird mir durch die Bibliothek quasi so vor die Nase gesetzt.
Herrgott ...geht die Erbsenzählerei wieder los.
Wir spulen nochmal ganz zurück. Die Struktur stammt von der Seite RemoteXY. Je nachdem welche und wie viele Elemente im Online-Editor platziert werden wird die Struktur automatisch generiert und dessen Bibliothek mit auf den Weg gegeben - also ist diese fix zur Kompilierung, kann aber beliebig oft die Form ändern.
Ich möchte speziell für die Button eine Flankenabfrage implementieren (positiv & negativ) und dafür benötige ich nunmal den Wert des Members vor der Aktualisierung um die entsprechenden Vergleiche durchzuführen.
Dann musst du doch wissen, was und wo der Status eines Button in der struct ist. Das passt nicht dazu, dass der Aufbau der struct sich ändern kann, ohne dass du das weißt.
Irgendwie habe ich das Gefühl wir reden aneinander vorbei.
Deshalb möchte ich doch den Namen der Variablen angeben können, damit es eben egal ist an welcher Stelle im Struct just dieser Member steht. Wie gesagt... die Krücke über ein Hilfsarray und offsetof habe ich und das funktioniert auch, es ist halt nur nicht "schön".
Können wir also bitte zurück zu meiner Frage kommen: Geht folgendes - und falls ja, wie?
Damit muss er aber mit jeder neuen Structur, die er erstellt auch den Code für die Vergleiche neu bauen - und das will er ja nicht.
Und auch das auswerten über ALLE Member ist nicht gewollt, denn das kann memcmp() in einem Rutsch ohne Angabe der einzelnen Member, was er ja ausgeschlossen hat.