在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方法的用户只需要能够提供一个过滤条件,而不必说“返回”作为一个命令性语句。
答
可以使用Boost.Phoenix此:
using namespace boost::phoenix::placeholders;
getCount(_1 > _2);
_1
和_2
是argument placeholders和整个关系式形成一个功能对象返回的比较结果。
如果没有'return'就不能返回。 – NathanOliver
@NathanOliver我稍微更新了我的问题。更清楚的是,如果我有一个语句“int a = b + c;”短语“b + c”实际上返回b + c的值,但我们不必说“返回”。我想简单地说“int a = myfunc”;在别的地方我说myfunc是“b + c”而不必说“return”。 – nappyfalcon
我们不必在那里说'return',因为我们不在函数中。抽象地说,'int a = b + c;'调用'operator +'作为'int',它添加并且返回一个值,然后这个值被赋值给'a'。那个'operator +'还在做'return'。就像我说过的,你不能使用'return'来返回一个函数的值。 – NathanOliver