在boost :: function中使用std :: for_each中的boost.lambda

时间:2014-02-28 10:46:57

标签: c++ boost c++11 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文档,但我没有找到任何有用的东西。

1 个答案:

答案 0 :(得分:2)

为了实现此目的,您必须明确限定boost::lambda,以便boost::lambda::_1而不是boost::arg中的boost/bind

  std::for_each(functions.begin(), functions.end(), 
        boost::lambda::bind(boost::lambda::_1));