Ist es möglich, einen Referenz-Cast in C++ zu überladen?Überladen einer C++ - Referenzübersetzung (Downcasting-Vererbung)
Ich habe Code habe ich nicht im Format berühren:
void someMethod(Parent& parentReference, ...){
...
Child& child = static_cast<Child&>(parentReference);
(Die Klasse Kind erbt direkt und öffentlich aus der Klasse Parent)
Ich mag würde das Verhalten anpassen von dieser Besetzung - Ich kann die Klasse Child ändern.
Ich habe versucht, wie so den Cast-Operator Überlastung:
Parent::operator Child&(){
...
Aber diese Methode nie aufgerufen wird.
Ich frage mich, ob das überhaupt möglich ist?
EDIT
Per R Sahu, ich bin in diesem Szenario der Nähe: https://timsong-cpp.github.io/cppwp/n3337/expr.static.cast#2
struct B { };
struct D : public B { };
D d;
B &br = d;
static_cast<D&>(br); // produces lvalue to the original d object
dass außer, statt einfach von B &br = d;
Zuweisung br
als Argument der Methode kommt, und ist zuvor über das Netzwerk gesendet (als NML).
Dies wäre das Szenario:
struct B { };
struct D : public B {
int a;
int b
};
D d;
d.a = x;
d.b = y;
server.send(d);
...
client.receive(msg);
receive(B& msg){
D& msgD = static_cast<D&>(msg);
}
msgD.x
und msgD.y
kommen über den Draht und korrekt rekonstruiert. Ich möchte jedoch die Art ändern, wie sie rekonstruiert werden, ohne die receive
Methode zu ändern. Ist das möglich?
Wenn Sie 'Parent' nicht ändern können, sollte der Compiler Sie nicht einmal definieren lassen: 'Parent :: operator Child &()'. – Brian
Mögliches Duplikat von [Ist es möglich, den Operator \ * static \ _cast \ * zu überladen?] (Https://stackoverflow.com/questions/8432651/is-it-possible-to-overload-the-static-cast- Operator) –
@Brain - ja, das war ein Fehler - ich habe entsprechend bearbeitet. Ich kann Eltern ändern. – fatman