boost::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
を変更した場合には罰金のビルドが、私は表現がうまく形成されているかどうかわからないです。時には、ラムダでの怠惰な評価のために、コールが遅延する可能性があるため、予想される結果(この場合ではなく、ラムダでの以前のテスト)を得られなかったことがあります。
boost lambdaで静的メンバーにアクセスする正しい方法は何でしょうか?
私は静的変数にアクセスするすべての
AFG