使用boost创建一个始终返回true的lambda函数

时间:2010-08-24 15:25:49

标签: c++ boost lambda c++03

假设我有一个函数,它采用某种形式的谓词:

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]

2 个答案:

答案 0 :(得分:9)

UncleBens在Scharron的回答中评论了这一点,但我认为这实际上是最好的答案所以我偷了它(对不起UncleBens)。只需使用

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

the documentation for Boost.Lambda所述,只有算子的最小arity为零,最大arity是无限的。因此传递给仿函数的任何输入都将被忽略。

答案 1 :(得分: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));
}

诀窍在于true || (_1 + _2 + _3),您正在创建一个包含3个参数(_1_2_3)的boost lambda,并始终返回true