2

関数メンバーの正確なアドレスを取得する方法はありますか? たとえば、私は持っています:

struct foo
{
    void print() { printf("bla bla bla"); }
};
//////////////////////////////////////////////////////////////
unsigned int address = foo::print;
4

2 に答える 2

2

次の構文を使用して、メンバー関数へのポインターを宣言できます。

typedef void (foo::*address)();
address func = &foo::print;

非静的メンバー関数を呼び出すには、そのクラスの既存のインスタンスが必要です。

(fooInstance.*func)();
于 2013-01-29T08:24:38.877 に答える
1

「正確な住所」の意味がわかりません。unsigned int (私のマシンのポインターよりも小さい) にアドレスを入れる方法は確かにありません。さらに言えば、関数へのポインターを a に置く方法はありませんvoid*。繰り返しますが、関数へのポインタが より大きいマシンを使用しましたvoid*。最後に、(非静的) メンバー関数へのポインターを関数へのポインターに入れる方法はありません。メンバー関数へのポインターは、ほとんどの場合、より大きくなります。最後に、与えられた:

void (MyClass::*pmf)();
MyClass* p;
(p->*pmf)();

の内容に応じて、さまざまな関数を呼び出すことができpます。

したがって、あなたが何を求めているのかはまったく明確ではありません。

于 2013-01-29T08:53:41.503 に答える