enum class -> error und enum -> ok?



  • Hallo,

    // irgendwo in einer Klasse
    enum class Type1 : unsigned int
    {
      A = 0,
      B = 1
    }
    
    enum Type2
    {
      A = 0,
      B = 1
    }
    
    void hello(unsigned in) { /** ... **/}
    
    // 
    hello(Type1::A); --> Error
    hello(Type2::A); --> Ok.
    
    ... error: no matching function for call '...'...
    g++ 4.4.5
    

    Wieso bekomme ich bei dem ersten einen Fehler gemeldet?
    Wie komme ich an den Wert bei Type1 ran?

    Danke Thomas



  • Ich nehme mal an, Kapitel 2.6 hier dürfte das Problem erklären. Die aus C geerbten normalen enums können implizit nach int konvertiert werden, die neue enum-class nicht. (vielleicht kann einer der C++0X-Experten sagen, ob es eine explizite Umwandlung gibt)



  • Ja, dort wird enum class erklärt. Leider konnte ich bis heute aus keinen Dokument die Information entnehmen, wie ich an den Wert komme.

    enum class Meins : unsigned short{ First = 10, Last = 30 };
    

    Wie komme ich an den Wert von Meins::First und Meins::Last?



  • Sinn und Zweck der neuen "enum class" ist ja gerade die Typsicherheit, d.h. daß eben keine implizite Konvertierung nach "int" möglich ist.
    Du müßtest also entweder selber den Cast-Operator in der "enum class" definieren oder aber mal einen reinterpret_cast<> ausprobieren.



  • Wäre mir neu, wenn man Cast-Operatoren in enum class deklarieren könnte. Warum reinterpret_cast und nicht static_cast ?



  • Was spricht gegen static_cast?


Anmelden zum Antworten