nullaryファンクターを引数として取る関数があるとします。
void enqueue( boost::function<void()> & functor );
intを取り、内部で何かを行う別の関数があります。
void foo( int a);
これらを一緒にネストしますが、作成しないで、署名付きのファンクターを取得します。
boost::function<void(int)> functor
値(たとえば4)で呼び出されると、次のように実行されます。
enqueue( boost::bind(&foo, 4) )
私の最初の試みは次のとおりでした。
boost::function<void(int)> functor = boost::bind(&enqueue, boost::bind(&foo,_1))
ネストされたバインドが与えられると、バインドが合成を実行するため、これは失敗します。fooが最初に呼び出され、次に値voidがエンキューに「返され」ましたが、これは失敗します。
私の2番目の試みは次のとおりです。
boost::function<void(int)> functor = boost::bind(&enqueue, boost::protect( boost::bind(&foo, _1) ) )
enqueueは単項ファンクターではなく、nullaryを受け入れるため、これは失敗しました。
私が求めていることはできますか?
その他の情報:
- これは基本的に、6年前の未回答のブーストフォーラムの質問と同じです:http: //lists.boost.org/boost-users/2004/07/7125.php
- いくつかの読書は、boost :: lambda::bindをboost::lambda::unlambdaおよびboost::lambda::protectと一緒に使用すると私が求めていることを実行できることを示唆しています。残念ながら、boost :: lambdaの許可されるプレースホルダーの数は許容できないほど少なく(3)、コンパイル時のオーバーヘッドが高くなります。