Enum: nächsten Wert



  • Hi

    Wie kann ich ein enum um eins erhöhen?

    enum Foo
            {
                EINS = 1,
                ZWEI = 2
            };
    //..
            Foo aFoo = EINS;
            aFoo++;           // Geht nicht
            aFoo += 1;        // auch nicht
    

    😕

    Danke im voraus.



  • hm...kann das grad schlecht ausprobieren, aber müsste nicht

    aFoo = Foo((int(aFoo) + 1)
    

    funktionieren?



  • Schlechte Variante: static_cast
    Gute Variante: Operatoren überladen



  • Operator überladen geht für enums?
    Wusst ich nicht.



  • naja notfalls geht sowas schon:

    #include <iostream>
    
    enum test 
    {
    	T_ONE = 1,
    	T_TWO,
    	T_TREE
    };
    
    int main()
    {
    	test test_item = T_ONE;
    	std::cout << test_item << std::endl;
    	test_item = static_cast<test>(test_item + 1);
    	std::cout << test_item << std::endl;
    }
    

  • Mod

    Enumerator Inkrementator schrieb:

    Operator überladen geht für enums?
    Wusst ich nicht.

    enums sind UDTs, also ist das möglich.

    enum test
    {
        T_ONE = 1,
        T_TWO,
        T_TREE
    };
    
    test& operator++(test& x)
    {
        return x = x == T_TREE ? T_ONE : test( x + 1 );
    };
    test operator++(test& x, int)
    {
        test y = x;
        ++x;
        return y;
    }
    
    test& operator--(test& x)
    {
        return x = x == T_ONE ? T_THREE : test( x - 1 );
    };
    test operator--(test& x, int)
    {
        test y = x;
        --x;
        return y;
    }
    

    usw.


Log in to reply