Klasse mit Datentyp "auto"

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Klasse mit Datentyp "auto"

Beitrag von starcow »

Tach Zusammen (-:

Ich wollte eben eine kleine Klasse erstellen, die in einem bestimmten Kontext universell einsetzbar ist.
Dabei ist die Klasseninstanz ein Element einer Kette und zeigte jeweils auf seine "Nachbarsglieder" (Instanzen gleicher Klasse).
Allerdings soll der Zeiger "Parent" und "Target" universell gehalten sein, sprich, es soll möglich sein, erst zur Laufzeit festzulegen, welcher Art die Objekte sind, auf die gezeigt wird.
Ich dachte dabei an "auto", doch das scheint nicht zu funktionieren. Lässt sich das ganze trotzdem irgendwie realisieren?

Code: Alles auswählen

class CLS_ChainLink {
private:
	CLS_ChainLink* Next;
	CLS_ChainLink* Previous;
	auto Parent; // "Parent" und "Target" sollen flexibel sein und je nach Situation...
	auto Target; // ... auf verschiedenartige Objekte zeigen können.
}
Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Klasse mit Datentyp "auto"

Beitrag von xq »

Hey starcow,

zuerst dachte ich an templates, aber:
starcow hat geschrieben:es soll möglich sein, erst zur Laufzeit festzulegen, welcher Art die Objekte sind, auf die gezeigt wird.
Hierfür brauchst du entweder Vererbung, wenn dein Parent oder Target eine gemeinsame Basisklasse haben oder aber einen std::variant, was ähnlich wie eine Union funktionieren soll.

Was möchtest du denn erreichen?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Klasse mit Datentyp "auto"

Beitrag von starcow »

Hi xq :-)

Stimmt, Vererbung wäre natürlich eine Möglichkeit. Derzeit gibt es allerdings nur zwei verschiedene Arten, auf die "Parent" / "Target" zeigen können. Und wenn ich eine Basisklasse anlege, habe ich in der Summe wieder gleich viele Klassen angelegt, wie wenn ich separate Klassen erstellt hätte - nämlich zwei (zumindest bis jetzt). :-).

Die Elemente der Klasse sollen eine Kette bilden. Wichtig ist dabei, dass ich direkt auf ein Element der Kette per Zeiger zugreifen kann.
So hat also jedes Element einen "Next" und einen "Previous" Zeiger, also Zeiger auf die Nachbar-Elemente. Zudem sollen aber diese Elemente auch ein tatsächliches "Target" per Zeiger anvisieren können. Dieses Target soll dann nach Möglichkeit ein frei wählbares Objekt sein. Dabei wäre es natürlich nett, wenn ich nicht verschiedene Klassen anlegen müsste, nur um dann den Datentyp des "Target-Pointers" jeweils abzuändern.
Ich hoffe, man versteht, was ich meine :-X.
Das ganze brauche ich, um meine Elemente in einem Grid (spatial-hasing) registrieren zu können.

Gruss starcow

Hey, es ist Weihnachten! Ich wünsche allen ein frohes Fest! :-D
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Jonathan
Establishment
Beiträge: 2366
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Klasse mit Datentyp "auto"

Beitrag von Jonathan »

C++ hat halt ein statisches Typsystem, da gibt es kein 'zur Laufzeit'. Vereinfacht gesagt kopiert 'auto' den Typ von der Initialisierung, du musst das Objekt also erstens direkt initialisieren und zweitens ist der Typ danach genau so statisch.

So viel Arbeit ist eine Basisklassendefinition ja auch nicht. Und die Frage ist halt auch, was du dir vorstellst, wie das ganze am Ende überhaupt funktionieren soll. Um die Zeiger später benutzen zu können, musst du ja definieren, was so ein Zeiger können soll.

Du könntest natürlich auch void*-Zeiger benutzen und die mittels reinterpret_cast jeweils auf den passenden Objekttyp umbiegen. Allerdings ist das von der Benutzung her halt auch nicht so dolle, weil du ständig Fallunterscheidungen schreiben musst und auch irgendwie sicherstellen willst, dass es nicht ständig abstürzt. Letztendlich dürfte Vererbung hier tatsächlich die netteste Lösung mit dem kompaktesten Code sein.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Klasse mit Datentyp "auto"

Beitrag von starcow »

Achso, verstehe! Ich hatte da ganz grundsätzlich eine falsche Vorstellung von "auto". Danke für die Korrektur! :daumen: :-)

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Antworten