Generisch auf Struct-Elemente zugreifen?
-
Ist es möglich "generisch" auf die Elemente eines Struct zuzugreifen, anstatt in der Schleife immer den selben Code via Copy and Paste einzubauen.?
Beispiel:
enum { N = 1024 }; struct Foo { int height; int width; int weight; // etc. }; Foo foo[N]; for (int i = 0; i < N; i++) { // Do something with "foo[i].height" // Code via Copy and Paste... // Do the same with "foo[i].width" // Code via Copy and Paste... // Do the same with "foo[i].weight" // Code via Copy and Paste... // etc. }Das Struct Foo ist fix und kann nicht verändert werden (gewachsenes, sperriges Projekt).
Danke

-
Ja solch ein fortgeschrittenes Sprachmittel gibt es in der Tat, ueblicherweise unter dem Namen "Funktion" bekannt. Technisch gesehen koennte man wohl auch ein Makro dafuer nehmen, aber da sehe ich hier den Grund nicht wirklich.
-
cooky451 schrieb:
Ja solch ein fortgeschrittenes Sprachmittel gibt es in der Tat, ueblicherweise unter dem Namen "Funktion" bekannt. Technisch gesehen koennte man wohl auch ein Makro dafuer nehmen, aber da sehe ich hier den Grund nicht wirklich.
enum { N = 1024 }; struct Foo { int height; int width; int weight; // etc. }; Foo foo[N]; for (int i = 0; i < N; i++) { Func(foo[i].height); Func(foo[i].width); Func(foo[i].weight); // etc. }Das ginge schon, ist aber nicht gewollt (werde gemobbt
)
-
Makro ist aber nicht schlecht... Danke!
-
Doch, erstmal ist es schlecht, da es zu Fehlern verleitet, die nur recht schwer zu sehen sind. Das führt dann dazu, dass dein Code nicht kompiliert wird, aber du nicht verstehst warum.
Wenn er denn dann mal klappt kannst du lustige Effekte verursachen, die jegliches Wohlwollen deiner Programmlogik im Winde verwehen lassen.Nimm Funktionen.
Und erzähl mal genau was du vorhast.
-
Tomahawk schrieb:
enum { N = 1024 };Ein enum? Das ist poor man's constant. Gibt keinen Grund da nicht
const int N=1024;zu schreiben.
-
wird dein Struct denn auch "generisch" verarbeitet - sonst macht das doch irgendwie keinen Sinn, oder? sind es immer nur ints? werden die werte niemals kombiniert? oder sind das eher freistehende Attribute?