Vector mit variabler struct
-
Moin!
Ich habe ein folgenden Ausschnitt aus dem Code:
struct variable{
int id;
//weitere Variablen
}
struct s{
int x;
int y;
variable v;
}
std::vector<s> va;Gedacht ist es für eine 2d Map (Karte).
Ist es möglich, in Abhängigkeit der "id", vershiedene variablen in dem struct (variable) einzufügen.
Mir geht es darum. verschiedene bzw auch gemeinsame Eigentschaften zu sammeln und effektiv zu speichern und ab zu fragen.
Danke
-
Entweder mittels union oder aber mit modernem C++ 17 mittels std::variant<...>.
Statt einzelner Basisdatentypen kann man selbstverständlich auch eigenestruct
-Daten verwenden.Beachte, daß dann der Datentyp immer soviel Speicherplatz benötigt, wie der Größte der verwendeten Datentypen.
Alternative wäre eine OOP-Struktur, so daß alle Datentypen von einer gemeinsamen Basisklasse (diese kann auch leer sein) ableiten. Dann aber muß man zwingend (smarte) Zeiger verwenden:
std::vector<BaseClass *>
bzw.std::vector<std::unique_ptr<BaseClass>>
(oderstd::vector<std::shared_ptr<BaseClass>>
).
-
Die Variante mit OOP sähe dann ungefähr so aus.
struct VariableBase { int id; }; struct Variable : public VariableBase { // weitere Variablen }; struct s { int x; int y; std::unique_ptr<VariableBase> va; }; std::vector<s> va;
-
Ich würde dir die Variante mittels
std::variant
empfehlen, da du mit der Funktionstd::holds_alternative
in einzelnen Typen herausfinden kannst.Klar kann man das auch mittels OOP machen, macht aber etwas mehr Arbeit.
-
Mich wundert, dass hier niemand infrage stellt, wofür er das eigentlich braucht. Ich für meinen Teil verstehe es nämlich nicht.
@noname11 erwähnt 2d Maps, sowie verschiedene bzw. auch gemeinsame Eigenschaften.Zudem fehlt doch auch eine Einordnung darüber, wie das ganze benutzt werden soll. Stehen alle Varianten von vornherein fest, oder ist es sehr wahrscheinlich, dass sich die Menge der unterstützten Typen später ändert?
Sind also die Typen die Variation Points oder sind es die Operationen? Das verändert ganz fundamental die Empfehlung.
-
@DNKpp sagte in Vector mit variabler struct:
Mich wundert, dass hier niemand infrage stellt, wofür er das eigentlich braucht.
Es hängt immer davon ab, wie viel Informationen jemand bereit ist zu teilen. Und über ungelegte Eier braucht man nicht zu diskutieren.