2017-08-24 78 views
-2

實施例的條件(設計的):在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

回答

3

可以使用Boost.Phoenix此:

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

_1_2argument placeholders和整個關係式形成一個功能對象返回的比較結果。

相關問題