1
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)

4

1 に答える 1