我有一个可能令人尴尬的简单问题:传递和调用类中的成员函数。我知道我想使用 BOOST 绑定(和或函数),但我还没有真正掌握它的概念。
以下代码编译并执行有问题。但是当我想将“f3”函数更改为非静态类函数时,乐趣就开始了:
#include <iostream>
#include <inttypes.h>
#include <boost/bind.hpp>
#include <boost/function.hpp>
class Test
{
public:
void f1();
private:
void f2(void (*callfunc)(uint32_t));
static void f3(uint32_t x);
};
void Test::f1(){
f2(f3);
}
void Test::f2(void (*callfunc)(uint32_t)){
(*callfunc)(42);
}
void Test::f3(uint32_t x){
std::cout << "x: " << x << std::endl;
}
int main(int argc, char ** argv)
{
Test ct;
ct.f1();
return 0;
}
现在,改变后
static void f3(uint32_t x);
到
void f3(uint32_t x);
编译器不高兴并告诉我“错误:没有匹配函数调用'Test::f2()'”
阅读了许多关于 boost::bind 和 boost::function 的 SO 帖子后,我认为我需要更改 f2() 的定义以及 f1() 如何调用 f2() 将 f3() 作为调用目标,但是除此之外......关于 boost::bind 和 boost 函数的每一个组合我都尝试过编译失败。
我需要怎么写这个?作为一个额外的问题:是否有任何关于 boost::bind 和 boost::function 的简单介绍性读物?BOOST 文档在那里并没有真正帮助我。
B.