Cat*_*kul 6 c++ boost bind callback functor
假设我有一个带有任意签名的boost :: function,称为type CallbackType.
boost::bind组合一个函数来获取与CallbackType相同的参数但是连续调用两个函子?我对任何可能的解决方案持开放态度,但这里是......
...使用一些magic模板的假设示例:
Template<typename CallbackType>
class MyClass
{
public:
CallbackType doBoth;
MyClass( CallbackType callback )
{
doBoth = bind( magic<CallbackType>,
protect( bind(&MyClass::alert, this) ),
protect( callback ) );
}
void alert()
{
cout << "It has been called\n";
}
};
void doIt( int a, int b, int c)
{
cout << "Doing it!" << a << b << c << "\n";
}
int main()
{
typedef boost::function<void (int, int, int)> CallbackType;
MyClass<CallbackType> object( boost::bind(doIt) );
object.doBoth();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Boost已经提供了一种创建绑定函数序列的方法.使用Lambda的逗号运算符.
using namespace boost::lambda;
MyClass mc;
CallbackType object = (bind(&MyClass::alert, mc), bind(doIt, _1, _2, _3));
object(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的函子,object.当您使用三个参数调用该仿函数时,它将mc.alert()在传递这些参数之前调用doIt.括号很重要.
对于我上面的例子来说,你需要alert成为一个const功能.如果它需要是非const的,那么要么将指针传递给mc,要么用它包装boost::ref(mc).你需要使用Boost.Lambda bind而不是Boost.Bind; 后者与Lambda的函数组合运算符(特别是逗号)不兼容.