Prüfen ob Variable ein Pointer oder ein Objekt ist
-
Hallo,
ich suche eine Möglichkeit, mit der ich zur Compilezeit oder zur Laufzeit prüfen kann, ob eine Variable ein Pointer auf ein Objekt oder direkt das Objekt ist.
Hintergrund:
Das ist leider notwendig geworden, da eine Template-Methode teilweise direkt die Objekte und Pointer bekommt. Hier muss ich dann selbstverstaendlich unterschiedlich zugreifen.
Da der Template-Typ zur Compilezeit fest steht, kann die Unterscheidung auch zur Compilezeit passieren. RTTI versagt leider bei Objekten im Stack.Danke
-
Sowas?
template<class T> void foo(T t) { std::cout << "1 " << t << std::endl; } template<class T> void foo(T* t) { std::cout << "2 " << *t << std::endl; } int main() { int x = 5; foo(x); foo(&x); }
-
Super, das funktioniert.
Aber ich finde es etwas seltsam, dass das funktioniert, denn wenn es nur die erste foo()-Funktion geben würde, dann würden beide Aufrufe dort münden.
Der Compiler sucht sich anscheinend das am ehesten passende Teil raus.
-
beim Funktionsaufruf findet eine Typüberprüfung(und falls nötig/möglich auch eine explizize konvertierung)
wenn du jetzt die Funktion foo() mit verschiedenen Paramtetern schreibst wird die aufgerufen, zu der die Parameter passen....
theduke
-
Der Compiler sucht sich anscheinend das am ehesten passende Teil raus.
Korrekt. Nennt sich partial ordering of function templates.