在C++中是有可能写一个lambda这是一个条件,即只是计算结果为真或假

问题描述:

实施例的条件(设计的):在C++中是有可能写一个lambda这是一个条件,即只是计算结果为真或假

我已经写了需要可以采取“过滤器”表达的方法,并返回匹配的项数:我知道我可以调用此如下

int getCount(std::function<bool(int, int)> filter) 
{ 
    // Iterate pairs of numbers p,q 
    // Count number of pairs where filter(p, q) is true 
    // Return count 
} 

getCount([](int x, int y) { return x > y; }); 

但是,由于意图是写一个过滤器“条件”或“表达”,即一些非常具有说明性而非强制性的东西,我理想地希望排除“返回”声明。

线沿线的东西:

getCount([](int x, int y) { x > y; }); 

getCount([](int x, int y) { x > y }); 

显然,以上是不可能的,但有在例如性病或升压任何东西,让我实现这个意向?

基本上getCount方法的用户只需要能够提供一个过滤条件,而不必说“返回”作为一个命令性语句。

+9

如果没有'return'就不能返回。 – NathanOliver

+0

@NathanOliver我稍微更新了我的问题。更清楚的是,如果我有一个语句“int a = b + c;”短语“b + c”实际上返回b + c的值,但我们不必说“返回”。我想简单地说“int a = myfunc”;在别的地方我说myfunc是“b + c”而不必说“return”。 – nappyfalcon

+0

我们不必在那里说'return',因为我们不在函数中。抽象地说,'int a = b + c;'调用'operator +'作为'int',它添加并且返回一个值,然后这个值被赋值给'a'。那个'operator +'还在做'return'。就像我说过的,你不能使用'return'来返回一个函数的值。 – NathanOliver

可以使用Boost.Phoenix此:

using namespace boost::phoenix::placeholders; 
getCount(_1 > _2); 

_1_2argument placeholders和整个关系式形成一个功能对象返回的比较结果。