decltype tut nicht



  • hi
    http://ideone.com/Lr4mp tut nicht (fehler sind auch dort). alternativen ohne c++0x?

    mfg



  • Allgemeingültige Alternativen ohne C++0x gibts nicht.



  • Die automatische Typdetektion funktioniert nur bei Template-Funktionen, nicht bei Klassen. Alternativen fallen mir auch nicht wirklich ein.



  • Suchst Du nach Boost.TypeOf ?

    Achtung decltype != typeof

    typeof liefert den Typ eines Ausdrucks. Ein Ausdruck hat nie einen Referenztypen. decltype liefert den "deklarierten Typ" (Rückgabetyp der Funktion oder deklarierter Typ einer Variablen).

    Mit C++0x kann man sich TYPEOF mit decltype so bauen:

    #include <type_traits>
    #define TYPEOF(x) typename std::decay<(x)>::type
    

    (das nur am Rande)

    Viele Compiler bieten eine Erweiterung an, um den Typ eines Ausdrucks zu erfragen. Boost.TypeOf bietet dafür eine einheitliche Schnittstelle. Verwendest Du einen Compiler, der diese Erweiterungen nicht besitzt oder nicht unterstützt wird, ist man bei Boost.TypeOf gezwungen, benutzerdefinierte Typen manuell zu registrieren, damit TypeOf auch mit diesen Typen funktioniert -- wenn ich das richtig in Erinnerung habe.

    Es gibt aber auch andere Tricks, die keine Compiler-Erweiterung erfordern, siehe Boost.ForEach.


Log in to reply