enum class Typisiert



  • Hallo,

    wieso muss ich an dieser Stelle bei einer typisierten enum class einen type cast machen? Kann man Operatoren in enum classes überladen?

    enum class EMessageType : int {
    	typeA = 1,
    	typeB = 2,
    	typeC = 3,
    	typeD = 4
    };
    
    int main(int argc, char* argv[]) {
    	int x = EMessageType::typeA + EMessageType::typeB;
    	return 0;
    }
    

    Mit freundlichen Grüßen,

    VRComputing


  • Mod

    VRComputing schrieb:

    wieso muss ich an dieser Stelle bei einer typisierten enum class einen type cast machen?

    Weil typisierte enums das ja gerade verhindern sollen. Sie sind eben keine Sammlungen von Integerkonstanten mit schöner Fassade mehr*.

    Kann man Operatoren in enum classes überladen?

    Nein, aber man kann sie für die enums überladen:

    enum class EMessageType : int 
    {
        typeA = 1,
        typeB = 2,
        typeC = 3,
        typeD = 4
    };
    
    int operator+(EMessageType lhs, EMessageType rhs)
    {
      return (int)lhs + (int)rhs;
    }
    
    int main() 
    {
        int x = EMessageType::typeA + EMessageType::typeB;
    }
    

    Wobei ich doch irgendwie stark bezweifle, dass du ein strongly typed enum benutzen möchtest, wenn du am Ende doch wieder mit den Werten rechnen willst. Strongly typed enums sind ja gerade dafür da, dass das nicht mehr geht. Wenn du logisch gruppierte Bezeichner für Integerkonstanten haben willst, nimm ein normales enum.

    *: Ok, im Prinzip sind sie es immer noch. Aber die Fassade ist sehr viel besser geworden 🙂 .


Log in to reply