typedef void (*callable_function)(double);
void call_function(callable_function func)
{
func(3.0);
}
class Foo;
union converter {
callable_function func;
void (Foo::*foo_func)(void);
};
class Foo {
private:
double d;
public:
Foo(void) : d(0.0)
{
converter c;
c.foo_func = &Foo::set_double;
call_function(c.func);//I know i can call the function directly, but that is not what i want to achieve
}
void set_double(double value)
{
d = value;
}
};
void main(void)
{
Foo foo;
}
上記のコードを実行しようとすると、次の行でヒープ破損エラーが発生します
d = value;
。
おそらく、呼び出されている関数がメンバー関数ではなくクラス関数であるためです。しかし、この行を
に変更しようとすると、次のコンパイラエラーが発生します。c.foo_func = &Foo::set_double;
c.foo_func = &this->set_double;
error C2276: '&' : illegal operation on bound member function expression
void(Foo::*)(void)
void()(void)