Sie können nicht. Zumindest nicht auf die direkte Art und Weise, wie Sie es tun wollen, und ohne teilweise zu definieren, was eine Struktur ist. Ich werde meine Antwort in zwei Teile die erste Erklärung möglich Möglichkeiten, um zumindest nahe, was Sie wollen und die zweite aufgespalten zu erklären, was Sie sollten eigentlich tun:
bekommen und schmutzig
Es gibt zwei Möglichkeiten (die ich zur Zeit mit oben kommen kann), dass Sie etwas zu denken geben könnte:
- eine Wrapper-Klasse verwenden - während C++ erhöht sich die Flexibilität der Struktur ist es nicht ihre Absicht einer Änderung einfacher heterogener Datencontainer. Es erlaubt jedoch eine Überlastung des Operators einschließlich des Operators
[]
. Wenn Sie also eine Klasse erstellen, die die Struktur als ihr Element enthält (dh sie umschließt die Struktur), können Sie die Daten der Struktur unter Verwendung von []
verfügbar machen. Dies kommt so nah wie möglich an das, was Sie tun möchten. Es vereitelt jedoch den ganzen Zweck der Verwendung einer Struktur, da Sie dies mit einfachen Nicht-Sturct-Klassenmitgliedern tun können, aber ich habe es tatsächlich vor nicht allzu langer Zeit gesehen, als ich durch eine C++ - Bibliothek ging, die ein vorheriges C- Version von sich selbst, um modernere Funktionen bereitzustellen, ohne dass der C-Code vollständig neu geschrieben werden muss.
- Verwenden Sie Zeiger mit einem Offset - Indexierung im Allgemeinen vorschlagen, dass der zugrunde liegende Container eine Konsistenz hat, wenn es um die Blöcke von Daten kommt, die es enthält. Das Problem besteht darin, dass eine Struktur diesem nicht unbedingt folgt, da sie (genau wie in Ihrem Fall) mehrere Datentypen enthalten kann. Wenn Sie die Heterogenität Ihrer Struktur opfern und mit einem einzelnen Datentyp (zum Beispiel einem oder mehreren Doubles) bleiben können, können Sie sicher (bis zu dem Punkt, an dem Sie immer die Anzahl der Elemente der Struktur merken müssen) einen Zeiger verwenden und eine zunehmende/abnehmende Verschiebung, um auf seine Mitglieder zuzugreifen. Wie bei jeder Art von Daten, wenn Sie eine Standardreferenz (aka Zeiger) auf etwas erstellen, zeigt dieser Verweis auf die Adresse des Anfanges des Speichers, den diese Daten verwenden. Es ist üblich, Zeiger zu verwenden, um durch Arrays zu iterieren, und es funktioniert genau so - Erstellen Sie einen Verweis auf Ihre Struktur und das Add + 1, +2, ... (so viele Mitglieder, die struct hat). Dies macht die Dinge jedoch übermäßig kompliziert und ist fehleranfällig. Wie erwähnt, erfordert es auch die Verwendung der gleichen Art von Daten in Ihrer Struktur.
Die Alternativen ...
Von dem, was Sie als Informationen gegeben haben, ich glaube, Sie für eine ganz andere Art von Daten suchen - ein Wörterbuch, Karte oder einer Liste, die eine Art von benutzerdefinierten enthält generischer Datencontainer, der alle Arten von Daten enthalten kann, aber auch den Datentyp dieser Daten speichert, um deren ursprünglichen Zustand wiederherstellen zu können. Viele Bibliotheken bieten solche Container zum Beispiel Qt hat die QVariant
(Teil des Kernmoduls), boost
hat die boost::variant
, std::tuple
(oder noch besser Tupel genannt) mit Ihrem Standard C++ (seit C++ 11) und so weiter zur Verfügung gestellt. Ich kann mehr über Qt sprechen, da ich mehr Erfahrung damit habe. Es bietet die (eine typedef
für QList<QVariant>
), die Indexierung ermöglicht. Natürlich müssen Sie dazu 1) Ihre Struktur-Sache aufgeben und 2) weiterentwickelte Container verwenden, die möglicherweise große Nachteile bei allem mit sich bringen, was Sie gerade betreiben, einschließlich Lizenzierungsproblemen, Speicheraufwand, größeren Binärdateien und vielem mehr zusätzliche Bibliotheksdateien usw.
Sie können nicht. Warum willst du das machen? Wenn Sie ein Array verwenden möchten, verwenden Sie ein Array. Sieht aus wie ein [XY-Problem] (http://xyproblem.info/). –
Sie können dies in C++ nicht tun – Sean
Wenn die Sprache das erlaubt ... Stellen Sie sich die Verwüstung vor, die es in Ihrem Programm verursachen würde, wenn Sie eines Tages entscheiden würden, die Reihenfolge der Mitglieder in 'Student' zu ändern. Außerdem wird es ein Alptraum sein, den es zu pflegen gilt. Sie können nicht herausfinden, ob 'a1 [0]' der Name oder das Alter ist, ohne die Definition der 'struct' nachzuschlagen. –