C++でリファレンスキャストをオーバーロードすることは可能ですか?C++リファレンスキャストのオーバーロード(ダウンキャスト継承)
私は形式に触れることができないコード持って:私は動作を調整したい
void someMethod(Parent& parentReference, ...){
...
Child& child = static_cast<Child&>(parentReference);
(クラスの子がクラスの親から直接、公表継承)
をこのキャストの - 私はクラスの子を変更することができます。
私はそうのようなキャスト演算子をオーバーロードしようとしました:
Parent::operator Child&(){
...
しかし、このメソッドが呼び出されることは決してありません。
これが可能かどうか疑問に思い始めていますか?
EDIT
パーR Sahu、私はこのシナリオに近いです:代わりに、単にB &br = d;
を割り当てることを除いて 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
、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-オペレータ) –
@Brain - それは間違いだった - それに応じて編集した。私は実際に親を変更することができます。 – fatman