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
问题#1:有没有办法将指针(可能正在转换)从void(Foo::*)(void)
转换为void()(void)
或修复编译器错误?
答案 0 :(得分:0)
指向“free”函数的指针和指向C ++中成员函数的指针具有不同的大小。 这意味着你技术上可以将指针释放到void * ptr的自由函数,因为它们通常具有相同的大小,但你不能将成员函数指针转换为void *或其他自由函数 - 你将得到你所拥有的得到。