Caster selber definieren

#821122
Lesenswert?

Um welche Programmiersprache geht es dir?

In C und C++ ist die Syntax fuers Casten immer die gleiche, voellig 
unabhaengig ob man nach int* oder nach Foo* castet (Foo irgendeine 
struct). In C++ gibt es hoechstens noch die Unterschiede 
reinterpret_cast, static_cast, const_cast und dynamic_cast. Die genauen 
Unterschiede findest du im C++-Standard, denn die sind ziemlich 
technisch.

In Java spielt es auch keine Rolle was man castet, das sieht immer nach 
C-Syntax aus.

In hoeheren Sprachen wie Haskell gibt es gar keine Cast-Operatoren mehr.
Gast #821173
Lesenswert?

In C++ kann man sich aber tatsächlich selber definieren, was ein Cast 
(bzw. allgemein eine Konvertierung) bei einem selbst definierten Typ für 
ein Ergebnis haben soll. Dazu gibt es die Konvertier-Konstruktoren und 
-Operatoren. Ob das bei Java und anderen Sprachen auch so ist, weiß ich 
nicht. Bei C gibt's das aber nicht.
Gast #821676
Lesenswert?

> (bzw. allgemein eine Konvertierung)

Exakt. Es handelt sich dabei nicht mehr um einen type cast, worauf sich 
der Fragesteller bezog. Konvertierungen gibt es natuerlich in jeder 
Sprache, die Datentypen in irgendeiner Form anbietet. C++ bietet dafuer 
halt ein wenig syntactic sugar, aber prinzipiell sind es auch nur ganz 
normale Funktionen.
Gast #821707
Lesenswert?

> Es handelt sich dabei nicht mehr um einen type cast, worauf sich
> der Fragesteller bezog. Konvertierungen gibt es natuerlich in jeder
> Sprache, die Datentypen in irgendeiner Form anbietet.

Es geht nicht darum, ob Konvertierungen von der Sprache angeboten 
werden, sondern ob sie es ermöglicht, eigene zu definieren.

> C++ bietet dafuer halt ein wenig syntactic sugar, aber prinzipiell sind
> es auch nur ganz normale Funktionen.

Auch Funktionen sind nur syntactic sugar, wenn man es so betrachtet.
#821942
Lesenswert?

> Auch Funktionen sind nur syntactic sugar, wenn man es so betrachtet.

Dem kann ich nicht zustimmen. Funktionen sind auf keinen Fall trivial 
durch einfachere Konstrukte zu ersetzen, das artet in enorme Details 
aus. Die impliziten Konvertierungsoperatoren dagegen sind ziemlich 
einfach durch explizite Funktionsaufrufe zu ersetzen.
Gast #821948
Lesenswert?

C# erlaubt das jetzt auch. Natürlich ist der Cast wieder eine Funktion 
innerhalb der entsprechenden Klasse (TypeA).


    public static implicit operator TypeB(TypeA f)
    {
        ...
    }

Castet den TypeA in TypeB. Der Aufruft würde etwa so aussehen:

TypeA a = ...
TypeB b = (TypeB)a;

TypeA muss also TypeB kennen und wissen, wie es in TypeB konvertiert 
werden kann. TypeB muss von TypeA nichts wissen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren