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

Can I use std::function (C++11 lambda) with Boost?

本文关键字:一起 Boost lambda std function 我可以 C++11      更新时间:2023-10-16

可能的重复项:
将加速适配器与 C++11 λ

一起使用

我想使用 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来完成,但我的观点更笼统。如何将 C++11 lambda 与 Boost 一起使用?

如果没有样板就无法完成,是否有任何计划来解决此问题?我尝试过搜索它,但发现的少得惊人。

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

#define BOOST_RESULT_OF_USE_DECLTYPE

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