使用带有逗号运算符的 boost::lambda 有一个非常简单的解决方案。在我的情况下,我将它用于一个修改器函数,该函数被定义为(B 是一个任意类,例如,A 是一个应该改变但驻留在 B 中并且不应该出去的类)
void B::modify( boost::function<void(A&)> func );
我的意图是只将修改器传递给修改函数,这使得在修改它时更容易获得控制(例如用于发射信号)。
有时我想应用 2 修饰符:
void A::setInvalid();
void A::setX( int x );
调用 2 个步骤,这不是方式(仅作为参考显示我们希望如何使用 modify 方法):
instanceA->modify(
boost::bind( &A::setInvalid, _1 );
instanceA->modify(
boost::bind( &A::setX, _1, 4 );
使用 boost::lambda 这可以连接到单个函数调用,因此只创建一个函数:
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
using namespace boost::lambda;
instanceA->modify(
( bind(&A::setInvalid, boost::lambda::_1)
, bind(&A::setX, boost::lambda::_1, 4) ) );
与您的问题相关,这看起来会是:
using namespace boost::lambda;
boost::function<void()> func = ( bind(f), bind(g) )