在std :: for中使用boost.lambda
我目前正在学习C ++ 11和boost中的新功能,例如lambda和boost :: function。
我试图在std :: for_each中使用boost.lambda,迭代类型是boost :: function。
代码如下所示:
void task1(int a)
{
std::cout << "task1: " << a << std::endl;
}
void task2(const std::string& str)
{
std::cout << "task2: " << str << std::endl;
}
int main()
{
std::list<boost::function<void()> > functions;
functions.push_back(boost::bind(&task1, 5));
functions.push_back(boost::bind(&task2, "test string"));
// working
std::list<boost::function<void()> >::iterator i = functions.begin();
for (; i != functions.end(); ++i)
{
(*i)();
}
// also working
std::for_each(functions.begin(), functions.end(), [](boost::function<void()>& f){f();});
// trying to use boost::lambda but none compiles.
std::for_each(functions.begin(), functions.end(), boost::lambda::bind(_1));
std::for_each(
functions.begin(),
functions.end(),
boost::lambda::bind(&boost::function<void()>::operator(), &_1, _1));
std::for_each(
functions.begin(),
functions.end(),
boost::lambda::bind(std::mem_fn(&boost::function<void()>::operator(), _1));
return 0;
}
如何用boost :: lambda调用boost :: function对象? 我想我应该用boost :: lambda :: bind()来包装它,但我只是不知道如何。 我已经阅读了boost.lambda文档,但是我没有在这里找到有用的东西。
为了使这个工作,你必须显式限定boost::lambda
以便你的意思是boost::lambda::_1
而不是boost/bind
boost::arg
来自boost/bind
。
std::for_each(functions.begin(), functions.end(),
boost::lambda::bind(boost::lambda::_1));
链接地址: http://www.djcxy.com/p/47359.html