Definition von Casting-Operatoren für Klassen (static_cast)



  • Hallo!

    Wie definiere ich Casting-Operatoren für meine Klassen/Strukturen für static_cast, reinterpret_cast, etc.?



  • Für reinterpret_cast, dynamic_cast, const_cast: Gar nicht. Wäre auch ziemlich sinnlos.

    Für static_cast:

    class A
    {
    public:
      // T ist irgendein Typ (z.B. int)
      operator T() const;
    };
    

    Für die Umwandlung nach T braucht es meistens keinen static_cast.



  • Wie definiere ich Casting-Operatoren für meine Klassen/Strukturen

    Gar nicht. Geht nicht.

    Mit Casten ist eine *explizite* Typumwandlung gemeint. Und eine solche geschieht in C++ über einen der exakt 4 Cast-Operatoren (static_cast, reinterpret_cast, const_cast, dynamic_cast), über einen Cast in "functional notation" (Type(val)) oder über einen "c-style" cast ((Type) val).

    Nix davon kannst du für deine Klassen/Strukturen definieren.

    cd9000 schrieb:

    Für static_cast:

    class A
    {
    public:
      // T ist irgendein Typ (z.B. int)
      operator T() const;
    };
    

    Für die Umwandlung nach T braucht es meistens keinen static_cast.

    Das ist weder für static_cast noch ein cast-Operator. Das ist ein *Konvertierungs*-Operator (conversion-operator). Und ein solcher ist nun gerade für eine *implizite* Umwandlung und damit eben gerade kein cast.

    Natürlich kann man einen solchen Konvertierungs-Operator auch explizit über einen cast-Operator aufrufen, nur das ist wohl nicht das, was hier gemeint ist.

    Worum geht es hier eigentlich?


Anmelden zum Antworten