Objekttyp in C++ zur Laufzeit ermitteln
Verfasst: 06.04.2017, 11:59
Hallo.
Ich benutze in meinem Programm für fast alle Objekte folgendes Interface (sehr ähnlich wie IUnknown von OLE/COM):
Aktuell implementiere ich in jeder Klasse, wo ich den Objekttypen benötige, die Funktion GetObjectTypeId.
Gibt es da keine Möglichkeit, das Ganze so zu gestalten, dass man nicht für jede Klasse die nötige Funktion (GetObjectTypeId/GetObjectTypeName) implementieren muss?
Ich brauche diese Funktionalität für mehrere Sachen.
1. Ich habe eine grafische Benutzeroberfläche, wo ich jedem Fenster (ClassGuiWindow) eine Fenster-Klasse (ClassGuiWindowClass) zuweisen kann. Es gibt Situationen, wo ich z.B. alle Kind-Fenster von einem Fenster durchgehen muss um die Fenster mit einer speziellen Fenster-Klasse weiter zu behandeln.
2. Beim Drag&Drop kann auch ein Object (InterfaceObjectBase*) genutzt werden. ich muss aber während dem "Draggen" und dann beim "Droppen" natürlich wissen, was das für ein Objekt ist.
EDIT: Ich habe mich schon gefragt, ob das wirklich hier her gehört, aber da es speziell für C++ ist, gehört es wohl in "Programmiersprachen, Quelltext und Bibliotheken", daher bitte verschieben.
Ich benutze in meinem Programm für fast alle Objekte folgendes Interface (sehr ähnlich wie IUnknown von OLE/COM):
Code: Alles auswählen
class InterfaceObjectBase
{
public:
virtual Void AddRef(Void) const = 0;
virtual Void Release(Void) const = 0;
virtual UInt32 GetObjectTypeId(Void) const
{
return 0;
}
virtual const WChar* GetObjectTypeName(Void) const
{
return L"";
}
};
Gibt es da keine Möglichkeit, das Ganze so zu gestalten, dass man nicht für jede Klasse die nötige Funktion (GetObjectTypeId/GetObjectTypeName) implementieren muss?
Ich brauche diese Funktionalität für mehrere Sachen.
1. Ich habe eine grafische Benutzeroberfläche, wo ich jedem Fenster (ClassGuiWindow) eine Fenster-Klasse (ClassGuiWindowClass) zuweisen kann. Es gibt Situationen, wo ich z.B. alle Kind-Fenster von einem Fenster durchgehen muss um die Fenster mit einer speziellen Fenster-Klasse weiter zu behandeln.
2. Beim Drag&Drop kann auch ein Object (InterfaceObjectBase*) genutzt werden. ich muss aber während dem "Draggen" und dann beim "Droppen" natürlich wissen, was das für ein Objekt ist.
EDIT: Ich habe mich schon gefragt, ob das wirklich hier her gehört, aber da es speziell für C++ ist, gehört es wohl in "Programmiersprachen, Quelltext und Bibliotheken", daher bitte verschieben.