我正在嘗試使用boost lambda來避免編寫簡單的函數。 例如,我想用lambda來訪問結構的成員或調用類的方法,如:試圖使用boost lambda,但我的代碼不會編譯
#include <vector>
#include <utility>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
using namespace std;
using namespace boost::lambda;
vector< pair<int,int> > vp;
vp.push_back(make_pair<int,int>(1,1));
vp.push_back(make_pair<int,int>(3,2));
vp.push_back(make_pair<int,int>(2,3));
sort(vp.begin(), vp.end(), _1.first > _2.first);
當我嘗試編譯這個我收到以下錯誤:
error C2039: 'first' : is not a member of 'boost::lambda::lambda_functor<T>'
with
[
T=boost::lambda::placeholder<1>
]
error C2039: 'first' : is not a member of 'boost::lambda::lambda_functor<T>'
with
[
T=boost::lambda::placeholder<2>
]
由於vp包含pair<int,int>
我認爲_1.first應該工作。我做錯了什麼?
使用佔位符的成員函數時,lambda會變得有點複雜。您必須將成員方法綁定到佔位符(文檔中有一個示例)。然而替代方案是寫入存取器,例如'first(_1)> second(_2)'這在我看來有點清潔 – Anycorn 2010-04-15 05:12:44