Ich habe eine Menge von C-Struktur, die Zähler darstellen. Diese Strukturen bestehen aus mehreren Mitgliedern des gleichen Typs, sagen wir uint64_t
. Im Programm habe ich mehrere Instanzen der gleichen Struktur und in einigen Fällen muss ich alle diese gleiche Struktur summieren. Ich möchte operator+
dafür nicht verwenden, weil die Strukturen in Zukunft ändern können und mehr oder weniger Mitglieder haben und ich den Operator auch nicht immer ändern möchte.Sum alle Strukturelemente in generischer Weise
Ich dachte, dass ich eine sizeof
verwenden und ein Array des Strukturtyps der Struktur aus der Struktur erstellen und dann das Array summieren könnte. Ich würde eine Vereinigung dieser Struktur und eines Arrays machen. Dies würde mein Problem lösen, den Operator nicht ändern zu wollen, wenn ein neues Mitglied hinzugefügt oder entfernt wird, aber dies würde nur funktionieren, solange die Struktur nur Mitglieder des gleichen Typs enthält.
Also vielleicht gibt es einige generische, Template-Methode, dies zu tun, aber ich bin nicht so gut mit Vorlagen, so frage ich Sie C++ Gurus um Hilfe.
Beispiel einer solchen Struktur:
struct counter{
uint64_t a;
uint64_t b;
uint64_t c;
uint64_t d;
uint64_t e;
};
Kurz: Überqueren Sie die Struktur als Folge von benachbarten Speicherzellen und Summe entlang des Weges. Verwenden Sie sizeof, um zu bestimmen, wie viele Mitglieder Sie haben (vorausgesetzt, alle haben die gleiche Größe). Einige Zeiger und eine Schleife werden den Job erledigen. – Artur
Ein großes Problem besteht darin, dass es dem Compiler freisteht, zwischen den Elementen oder am Ende der Struktur einen Padding einzufügen. Obwohl es unwahrscheinlich ist, dass die Struktur in der Frage angezeigt wird, ist es nicht möglich, sie für irgendeine Struktur generisch zu machen, besonders wenn Sie mit dem Mischen von Typen beginnen. Sie müssen auch vorsichtig sein, das strenge Aliasing zu brechen. –
Modifizierung von 'Operator +', wenn die Struktur ändert, wäre die sinnvolle Sache zu tun. – jrok