我想用boost::lambda
寫一些簡單的謂詞,並且出現大量錯誤。使用boost lambda訪問靜態成員
我檢查了文檔,並且對lambda表達式中的靜態變量std::string::npos
有任何疑問。在我的代碼下面。
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/core.hpp>
#include <boost/lambda/bind.hpp>
int main(int argc, char** argv){
typedef std::vector<std::string> array;
namespace bl = boost::lambda;
size_t (std::string::* fp)(const std::string&, size_t) const
= &std::string::find;
std::string to_find("AA");
size_t pos = 0;
const char* data [] = { "AAAA","BBBB","","CCAACC","DDDDD" };
array v(data, data +4);
assert(v.size() == 4);
std::replace_if(
v.begin()
,v.end()
, bl::bind(
fp
, bl::_1
, bl::constant_ref(to_find)
, bl::var(pos)
) != bl::bind(&std::string::npos, bl::_1)
, "||"
);
return 0;
}
如果我改變比較
!= bl::bind(&std::string::npos, bl::_1)
to
!= std::string::npos
它生成很好,但我不知道,如果表達式完全形成了。有時我發現,由於lambda中的懶惰評估,我沒有得到預期的結果(不是在這種情況下,而是在以前的lambda測試中),因爲調用可能會延遲。
你知道一般什麼是正確的方式來訪問boost lambda中的靜態成員?
謝謝大家
AFG