我想尝试这样做:
class A {
void *(*func)(void *);
A(void *(*function)(void *)){
func = function;
}
}
class B {
void *real_func(void *);
A ptr;
B()
:ptr(&real_func)
{
...
}
}
但是我收到了这个错误:
错误:ISO C ++禁止获取不合格或的地址 括号内的非静态成员函数,以形成指向成员的指针 功能
有人知道如何将函数指针初始化为同一类中的函数成员???
谢谢!
卡洛斯
答案 0 :(得分:1)
由于real_func
不是静态成员函数,因此其类型不能为void *(*)()
。相反,它是void *(B::*)()
,因此您需要相应地声明func
:
void *(B::*func)();
// call it like this
pointer_to_b->*func();
如果你小心,你也可以使用指针A作为基类,但你必须确保指向A的指针指向B的实例:
void *(A::*func)();
但是,此时,您大多只是复制虚拟成员函数的功能。所以我建议你改用它:
class A {
virtual void *func() = 0;
};
class B {
void *func() {
// ...
}
};
答案 1 :(得分:0)
您可以像这样创建B:
struct B {
static void *real_func(void *);
A ptr;
B()
:ptr(&real_func)
{
...
}
};
静态成员函数的作用类似于常规函数,因此您可以为它创建函数指针。
如果您不需要常规函数指针,则可以使用std :: function:
#include <functional>
struct A {
std::function<void *(void*)> func;
A(std::function<void *(void*)> function)
: func(function)
{
}
};
struct B {
void *real_func(void *);
A ptr;
B()
: ptr(std::bind(&B::real_func,this,std::placeholders::_1))
{
}
};