閉じる

仮想関数へのポインタ

非仮想関数へのポインタを得て呼び出すのは簡単だけれど、仮想関数の場合どうなるのかと実験。*1
ベースクラスの仮想関数アドレスを得て呼び出せばレイトバインディングしてくれるみたい。

#include <stdio.h>
class hoge{
public:
virtual void foo()=0;
};
class hoge_impl0 : public hoge{
virtual void foo()
{
printf("hoge0\n");
}
};
class hoge_impl1 : public hoge{
virtual void foo()
{
printf("hoge1\n");
}
};
typedef void (hoge::*method)();
int main()
{
method m=&hoge::foo;
hoge_impl1 h;
hoge *p=&h;
(p->*m)();
return 0;
}

*1 やってみればわかるけど、派生クラスの仮想関数のアドレスを得ようとするとエラーになる。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)