1

可能重复:
使用带有 C++11 lambda 的 Boost 适配器

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

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

这不起作用,因为 std::function 没有 value_type 类型。我知道这种特殊的转换可以用 map_keys 来完成,但我的观点更笼统。如何在 Boost 中使用 C++11 lambda?

如果没有样板就无法完成,是否有解决此问题的计划?我曾尝试搜索它,但发现的很少。

4

1 回答 1

1

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

#define BOOST_RESULT_OF_USE_DECLTYPE

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

于 2012-10-01T13:19:46.023 回答