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));
}

诀窍在于true || (_1 + _2 + _3)您使用 3 个参数( 和 )创建 boost lambda _1_2始终_3返回true.

于 2010-08-24T15:46:22.230 回答