我可以将std :: function(C ++ 11 lambda)与Boost一起使用吗?

时间:2012-10-01 11:09:28

标签: c++ boost c++11

  

可能重复:
  Using Boost adaptors with C++11 lambdas

我想使用Boost范围适配器通过C ++ 11 lambda函数将地图映射(转换)到列表中。 像这样:

  boost::copy(myMap | transformed([](pair<string, string> p){return p.first;}),
              ostream_iterator<string>(cout, ", "));

这不起作用,因为std :: function没有value_type-type。我知道这个特殊的转换可以用map_keys完成,但我的观点更为笼统。如何将C ++ 11 lambdas与Boost一起使用?

如果没有样板不能做到,有没有计划解决这个问题?我试过去寻找它,但发现却很少见。

1 个答案:

答案 0 :(得分:1)

我自己找到了!从Boost 1.51.0开始,添加

#define BOOST_RESULT_OF_USE_DECLTYPE

在包含boost文件之前,它会神奇地使用decltype而不是:: value_type来推断返回类型。现在我的例子有效!