C++에서 참조 캐스트를 오버로드 할 수 있습니까?C++ 참조 캐스트 오버플로 (다운 캐스팅 상속)
나는 형식으로 만지지 수있는 코드있어 :
내가 행동을 조정하고 싶습니다
이void someMethod(Parent& parentReference, ...){
...
Child& child = static_cast<Child&>(parentReference);
(클래스의 하위 클래스의 부모에서 직접 공개적으로 상속을) 이 캐스트의 - 나는 하위 클래스를 수정할 수 있습니다.
그래서 같이 캐스트 연산자를 오버로딩 시도했다 : 그러나이 방법은 결코
Parent::operator Child&(){
...
를 호출되지됩니다.
이것이 가능한지 궁금한가요?
편집
당 R Sahu, 내가있어이 시나리오에 가까운 : 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
것을 제외하고
대신 단순히 B &br = d;
을 할당 br
인수의 방법으로 제공, 이전이다 네트워크를 통해 NML로 전송됩니다.
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
및 msgD.y
이
는 시나리오가 될 것입니다. 그러나receive
메서드를 수정하지 않고 재구성하는 방식을 변경하고 싶습니다. 이것이 가능한가?
'Parent'를 수정할 수 없다면 컴파일러는'Parent :: operator Child &()'를 정의하지 않아야합니다. – Brian
[\ static \ _cast \ * 연산자에 과부하가 걸릴 수 있습니까?] (https://stackoverflow.com/questions/8432651/is-it-possible-to-overload-the-static-cast- 연산자) –
@ 브레인 - 네, 그게 실수 였어요 - 그에 따라 편집했습니다. 사실 부모님을 수정할 수 있습니다. – fatman