Variablentyp zur Compilezeit feststellen



  • Hallo,

    irgendwo weit weit weg, möglicherweise in irgendeiner Headerdatei wird eine Variable definiert, meinetwegen:

    int wichtigerwert;
    

    Viel später im Quelltext brauche ich den Typen der Variablen, z.B.:

    std::cout<<"Maximaler Wert von wichtigerwert ist: " << std::numeric_limits<int>::max();
    

    Gibt es da eine Möglichkeit, dass ich dafür nicht erst nach der Deklaration von wichtigerwert suchen muss? Es geht im Prinzip nur um die Faulheit, nicht den ganzen Quelltext durchsuchen zu müssen.

    Eine Idee wäre

    typedef int wichtigerwert_typ;
     wichtigerwert_typ wichtigerwert;
    .
    .
    .
    std::cout<<"Maximaler Wert von wichtigerwert ist: " << std::numeric_limits<wichtigerwert_typ>::max();
    

    Das geht doch bestimmt irgendwie einfacher, oder?



  • Ja mit dem typeof Schlüsselwort, das kommt in C++0x, aber es wird auch jetzt schon von vielen Compilern angeboten (kostet die eh nichts, weil die das schon in sizeof implementiert haben).



  • Geht auch heute schon.

    template <typename T> 
    size_t numeric_limits_max(const T&)
    {
       return std::numeric_limits<T>::max();
    }
    
    int wichtigerwert;
    size_t c5snk_73b = numeric_limits_max(wichtigerwert);
    

    Existiert für den angegebenen Typen keine Spezialisierung von numeric_limits , kommt es zu einem Compilerfehler.



  • Vielen Dank an Euch beide, beide Wege bieten genau, was ich brauche. Mal gucken, ob mein Compiler schon typeof kann...



  • Nachguckfauler schrieb:

    Vielen Dank an Euch beide, beide Wege bieten genau, was ich brauche. Mal gucken, ob mein Compiler schon typeof kann...

    Als ich dein Posting las dachte ich eher an so etwas

    typeof( wichtigerwert ) andereVariable;
    

    wenn du dagegen nur solche Fälle wie in deinem Beispiel hast, dann kannst du ruhig Nexus' Variante nehmen, die ist schon jetzt standardisiert 🙂


Log in to reply