enum class und casting



  • Hi,

    ich habe folgende enum class:

    enum class Square : unsigned int
    {
        A=1,
        B=2,
        C=33 //etc...
    }
    

    Und dazu folgende Methode:

    Block GetBlock(Square s)
    {
         return _blocks[int(s)]; //Oder _blocks[static_cast<int>(s)];
    }
    

    Mir kommt dieses Konstrukt irgendwie merkwürdig vor, gibt es da evtl. eine elegantere Lösung (von wegen, man soll Casts vermeiden etc.)

    OP 🙂



  • Soweit ich das sehe ist der Sinn von enum class doch, dass man keine implizite Umwandlung mehr von enum class nach integer type hat. Insofern ist das schon ok so, außer dass ich für den cast eher static_caststd::size\_t nutzen würde, und diesen "bösen" Cast direkt in einer extra Umwandlungsfunktion verstecken würde, insofern du ihn öfter brauchst. (Denn dann kannst du zur Not Checks einbauen.)

    Habe mich aber noch nicht soo viel mit enum class beschäftigt, vielleicht gibt's da ja andere Sichtweisen.



  • Du musst natürlich einen static_cast<unsigned> verwenden. Alles weitere hat cooky schon gesagt.



  • Danke für eure Antworten.

    Das mit dem Verstecken in einer Funktion macht Sinn, aber da ich den Cast innerhalb der Klasse nur 2 mal benötige, passt das so (erstmal). Das ich auf unsigned casten muss stimmt. Da habe ich zu schnell das Beispiel getippert. Danke für den Hinweis :>

    Grüße

    OP


Anmelden zum Antworten