我在 MSVC7 上使用 boost v1.37。我被困在这些旧版本上,无法升级,所以请帮助我在我的能力范围内工作,不要建议升级作为答案。
我有一个具有三个成员函数的类。我想定义一个boost::function
可用于在同一类的不同实例上调用不同成员函数的方法:
typedef boost::function<bool (unsigned, unsigned)> MyFunc;
绑定看起来像:
boost::bind( &A::foo1, _1, _2, _3, boost::ref(some_fixed_param) );
我需要将boost::bind
上述内容传递给一个需要MyFunc
作为参数的函数。
我需要如何设置我boost::function
以获取boost::bind
将实例对象设置为占位符的函数对象(来自)?如何将实例 ( this
) 传递到boost::function
? 我在这里不断收到编译器错误,所以只是想确保我正确理解这一点。希望我已经解释清楚了。提前致谢。
编辑
我得到的真正错误是:
sample.cpp(1156) : error C2664: 'process' : cannot convert parameter 2 from 'boost::_bi::bind_t<R,F,L>' to 'FooFunc &'
with
[
R=bool,
F=boost::_mfi::mf3<bool,A,unsigned int,unsigned int,int>,
L=boost::_bi::list4<boost::arg<1>,boost::arg<2>,boost::arg<3>,boost::reference_wrapper<int>>
]
我正在使用的代码:
typedef boost::function<bool (unsigned, unsigned)> FooFunc;
class A
{
public:
bool foo1( unsigned s1, unsigned s2, int s3 )
{
}
};
bool process( unsigned s1, FooFunc& foo )
{
unsigned s2 = 100;
A* a; // pretend this is valid
return foo( s1, s2 );
}
void dostuff()
{
int s3 = 300;
process( 200,
boost::bind( &A::foo1, _1, _2, _3, boost::ref( s3 ) ) );
}
现在我知道这不是有效代码,因为在process()
函数中我需要以某种方式调用foo
实例指针a
。不知道如何连接两者,也不知道为什么会发生编译器错误。