最佳答案
Lambda 表达式可以使用 作为类模板参数吗?(注意,这是一个与 这个非常不同的问题,这个询问是否可以模板化 lambda 表达式本身。)
我是问你能不能做一些像这样的事情:
template <class Functor>
struct Foo { };
// ...
Foo<decltype([]()->void { })> foo;
例如,在类模板具有诸如 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;
但是我在 gcc4.4和4.6上测试了一下,显然没有用,因为 lambda 表达式创建的匿名类型没有缺省构造函数。(我记得 boost::bind
也有类似的问题。)标准草案不允许这样做是否有某种原因,或者我错了,它是允许的,但海湾合作委员会只是落后于他们的实施?