Я пытаюсь написать простой предикат, используя 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