相关疑难解决方法(0)

lambda函数可以模板化吗?

在C++ 11中,有没有办法模板化lambda函数?或者它本身太具体而无法模板化?

我理解我可以定义一个经典的模板类/仿函数,但问题更像是:语言是否允许模板化lambda函数?

c++ lambda templates c++11

210
推荐指数
7
解决办法
8万
查看次数

Lambda表达式作为类模板参数

可以lambda表达式被用来作为类模板参数?(注意这是比一个非常不同的问题这一个,其中询问是否lambda表达式本身可以模板化).

我问你是否可以这样做:

template <class Functor> 
struct Foo { };
// ...
Foo<decltype([]()->void { })> foo;
Run Code Online (Sandbox Code Playgroud)

这在例如类模板具有各种参数之类的情况下是有用的,这些参数equal_to通常被实现为单行仿函数.例如,假设我想实例化一个使用我自己的自定义相等比较函数的哈希表.我希望能够说出类似的话:

typedef std::unordered_map<
  std::string,
  std::string,
  std::hash<std::string>,
  decltype([](const std::string& s1, const std::string& s2)->bool 
    { /* Custom implementation of equal_to */ })
  > map_type;
Run Code Online (Sandbox Code Playgroud)

但我在GCC 4.4和4.6上对此进行了测试,但它不起作用,显然是因为lambda表达式创建的匿名类型没有默认构造函数.(我记得有一个类似的问题boost::bind.)是否有某些原因标准草案不允许这样做,或者我错了并且允许但是GCC仅仅落后于它们的实施?

c++ lambda templates c++11

60
推荐指数
4
解决办法
3万
查看次数

什么时候提升凤凰有用?

可能重复:
使用Boost.Phoenix有什么好处?

所以我开始阅读boost phoenix的文档.

但是,我必须承认我不太了解库的目的,特别是因为我们在C++ 0x中对lambdas有语言支持.

有人可以解释或给我一个例子吗?

boost boost-phoenix c++11

16
推荐指数
2
解决办法
2756
查看次数

标签 统计

c++11 ×3

c++ ×2

lambda ×2

templates ×2

boost ×1

boost-phoenix ×1