我正在尝试使用 boost::lambda,但遇到了一个错误,我无法弄清楚如何解决。
我觉得这是一个初学者的错误,所以请原谅我的无知(而且,我不得不承认,我也懒惰地没有阅读整个 boost lamda 文档)。
似乎在某些情况下使用 boost::bind(或者 boost::lambda::bind?),比 boost::lambda 更适合,但我不确定它是否可以在这里应用。我不想为 编写单独的函数if cond(arg1) arg2.insert(arg1) ;
,因为它会破坏目的;我猜它不会比函子好多少。
我在工作中使用带有 VC9 的 boost 1.35。错误位于cond()
和insert()
调用站点:“C2664:无法从 'boost::lambda::placeholder1_type”转换参数 1
我在我的 cygwin 上用 g++ 复制了这个片段的问题。
#include <boost/function.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/if.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <set>
void work( boost::function<void(long)> doAction ) {
long results[] = { 2, 5, 4 };
BOOST_FOREACH( long r, results )
doAction( r );
}
bool cond( long r ) { return r % 2 == 0 ; }
int main() {
using namespace boost::lambda;
std::set<long> myResults;
work(
if_then( cond(_1) , boost::ref(myResults).get().insert(_1) ) );
BOOST_FOREACH( long r, myResults )
std::cout << r << "\n";
}
g++ 错误:
lambda_test.cpp: In function ‘int main()’:
lambda_test.cpp:21:19: error: cannot convert ‘boost::lambda::placeholder1_type {aka const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >}’ to ‘long int’ for argument ‘1’ to ‘bool cond(long int)’
if_then( cond(_1) , boost::ref(myResults).get().insert(_1) ) );
^
lambda_test.cpp:21:60: error: no matching function for call to ‘std::set<long int>::insert(boost::lambda::placeholder1_type&)’
if_then( cond(_1) , boost::ref(myResults).get().insert(_1) ) );
任何帮助,将不胜感激,
谢谢