【发布时间】:2017-07-17 10:38:39
【问题描述】:
我有一个 C 库,其结构如下:
struct A {
void process(){
doProcess();
};
void (*doProcess)(void);
}
现在,我有一个类似的课程
class B
{
public:
B(): a(){
a.doProcess = print();
}
void print(){
// do anything
}
private:
A a;
}
这是行不通的,因为 print 是一个成员函数,必须在 B 的对象上调用。 因此我尝试使用 boost::bind 函数:
a.doProcess = boost::bind(&A::print, this)
这也不起作用。
我还尝试修改 C 库并将函数指针定义替换为 boost::function 定义。但随后编译器抱怨没有找到包含在“boost/function.h”中的“”。
是否有一种(简单/增强)方法可以将成员函数分配给结构的指针?
【问题讨论】:
-
这根本不可能。使用例如
std::function(或Boost function)改为。或者使用非成员函数,或者static成员函数。 -
顺便说一下,“C”库结构不是 C 库的一部分。 C 没有像你展示的
A那样的成员函数。 -
我尝试在 C 代码中使用 boost::function。但随后 C 编译器抱怨找不到“
”包含。 -
这就是每个好的 C 回调系统都应该包含
void *上下文参数的原因。