const-member von nicht-const member aufrufen



  • hallo,

    ich probiere eine style-klasse (qt) zu portieren.
    jedoch habe ich ein problem:
    die funktionen des styles, welche aufgerufen werden um die
    widgets zu zeichen sind alle als const deklariert. jedoch muss
    ich nicht-const funktionen aufrufen um die buttons zu maskieren und
    die widgets-status zu registrieren. habe probiert den this-zeiger auf
    const zu casten, natürlich ohne jeglichen erfolg.

    nun, ist es möglich eine nicht-const funktion in einer const-funktion aufzurufen, bzw. kann man das umgehen?

    danke & gruss
    const-hasser



  • Das DARF man nicht umgehen. Sonst wär ja das const fürn Arsch.



  • const-hasser schrieb:

    nun, ist es möglich eine nicht-const funktion in einer const-funktion aufzurufen, bzw. kann man das umgehen?

    Sicher. Aber die Notwendigkeit deutet in der Regel auf einen Design-Fehler bzw. auf mangelende const-correctness hin. Statt wild rumzucasten und einen Namen wie "const hasser" zu tragen, solltest du dich vielleicht lieber mal mit den Prinzipien beschäftigen.

    Hier nun der Cast:

    class Foo
    {
    public:
        void const_func() const
        {
            // geht nicht, da const:
            // non_const_func();
    
            // so geht's
            const_cast<Foo*>(this)->non_const_func();
    
            // oder so
            Foo* self = const_cast<Foo*>(this);
            self->non_const_func();
        }
        void non_const_func()
        {
        }
    };
    

Anmelden zum Antworten