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 を使用すると、これを 1 つの関数呼び出しに結合できるため、作成される関数は 1 つだけです。
#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) )