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.


Anmelden zum Antworten