実行時に所属クラスを変える話の続き。前回は Objective-C だったけど今度は C++ でもやっておく。 http://d.hatena.ne.jp/shinichiro_h/20051231#1135964893 結局仮想関数テーブルを変えるだけなのでやることは一緒。 void become(const Base& o) { *(void**)this = *(void**)&o; }この時 const Base& o に渡す引数をあらかじめ sampleRight, sampleLeft として用意してるのがダサいです。消したきゃ _ZTV4Left + 8 と _ZTV5Right + 8 とかを使えば良さげ。 次回は気が向いたら C++ でポージング。 以下コードと実行結果。 #include <typeinfo> #include <stdio.h> using names