関数メンバーの正確なアドレスを取得する方法はありますか? たとえば、私は持っています:
struct foo
{
void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
次の構文を使用して、メンバー関数へのポインターを宣言できます。
typedef void (foo::*address)();
address func = &foo::print;
非静的メンバー関数を呼び出すには、そのクラスの既存のインスタンスが必要です。
(fooInstance.*func)();
「正確な住所」の意味がわかりません。unsigned int
(私のマシンのポインターよりも小さい) にアドレスを入れる方法は確かにありません。さらに言えば、関数へのポインターを a に置く方法はありませんvoid*
。繰り返しますが、関数へのポインタが より大きいマシンを使用しましたvoid*
。最後に、(非静的) メンバー関数へのポインターを関数へのポインターに入れる方法はありません。メンバー関数へのポインターは、ほとんどの場合、より大きくなります。最後に、与えられた:
void (MyClass::*pmf)();
MyClass* p;
(p->*pmf)();
の内容に応じて、さまざまな関数を呼び出すことができp
ます。
したがって、あなたが何を求めているのかはまったく明確ではありません。