C++ のメソッドへのポインタの配列を作って... メソッドの型は、いろいろなので、配列自体は void * にして... cast すれば良くって...
SchedTask::get_cpu_id(int i) {
(* ((Scheduler::*)(int)) table[GetCPUid])(i);
}
とかってすると... (これをすらすら書けるやつは、そうはいまい...)
invalid cast from void * to (Scheduler::*)(int)
へ? どっちもポインタなんだから、問題ないはずなんですが。なんでダメなんだよ。
つうか、virtual method では同じことやっているはずじゃん! ユーザにだけ使わせないのはずるい。
と思った瞬間わかりました。
virtual get_cpu_id(int i) { return 0; }
自動的に表引きになるじゃん。なので、システムコールをvirtualにすれば、外部参照は生じないってのわかりました。楽勝じゃん!
でも、なんか、
% nm Hello.o
00000050 t ____LLLL
0000004c t ____LLLL1
U __gxx_personality_sj0
とかいっているんですが。 gxx_personallity ってなんだ? でも、objdump -d で見る限り外部参照ではないみたいなので無視して良いのかな。
でも、これから、*.o をread で読み込んで elf header を読んで、alignment に沿って load とかの楽しいプログラミングが待っているらしいです。
No comments:
Post a Comment