6

ある形式の述語をとる関数があるとしましょう。

void Foo( boost::function<bool(int,int,int)> predicate );

常にtrueを返す述語で呼び出したい場合は、ヘルパー関数を定義できます。

bool AlwaysTrue( int, int, int ) { return true; }
...
Foo( boost::bind( AlwaysTrue ) );

しかし、別の関数を定義せずに(おそらくboost :: lambdaを使用して)この関数を呼び出す方法はありますか?

[編集:言うのを忘れた:私はC++0xを使用できません]

4

2 に答える 2

10

UncleBensはScharronの回答でこれについてコメントしましたが、実際にはそれが最良の回答だと思うので、私はそれを盗んでいます(申し訳ありませんがUncleBens)。単に使用する

Foo(boost::lambda::constant(true));

Boost.Lambdaのドキュメントで説明されているように、ファンクターの最小アリティのみがゼロであり、最大アリティは無制限です。したがって、ファンクターに渡された入力はすべて無視されます。

于 2010-08-24T18:43:12.303 に答える
4

ここに簡単な例があります:

#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
#include <iostream>

void Foo( boost::function<bool(int,int,int)> predicate )
{
  std::cout << predicate(0, 0, 0) << std::endl;
}

int main()
{
  using namespace boost::lambda;
  Foo(true || (_1 + _2 + _3));
}

秘訣は、 3つの引数( 、、および)true || (_1 + _2 + _3)を使用してブーストラダムを作成し、常に。を返す​​ところです。_1_2_3true

于 2010-08-24T15:46:22.230 に答える