在 C++11 中,有没有办法模板化 lambda 函数?或者它本身就太具体而无法模板化?
我知道我可以定义一个经典的模板化类/函子,但问题更像是:该语言是否允许模板化 lambda 函数?
2018 年更新:C++20 将附带模板化和概念化的 lambda。该功能已经集成到标准草案中。
2014 年更新:C++14 已于今年发布,现在提供与本示例中语法相同的多态 lambda。一些主要的编译器已经实现了它。
遗憾的是,就目前情况(C++11 中)而言,答案是否定的。多态 lambda 在灵活性和功能方面非常出色。
它们最终成为单态的最初原因是因为概念。概念使此代码情况变得困难:
template <Constraint T>
void foo(T x)
{
auto bar = [](auto x){}; // imaginary syntax
}
在受约束模板中,您只能调用其他受约束模板。 (否则无法检查约束。)可以foo
invoke bar(x)
? lambda 有哪些约束(毕竟它的参数只是一个模板)?
概念还没有准备好解决这类问题;它需要更多的东西,比如late_check
(在调用之前不会检查概念)之类的东西。更简单的方法就是放弃一切并坚持使用单态 lambda。
然而,随着 C++0x 中概念的删除,多态 lambda 再次成为一个简单的命题。但是,我找不到任何建议。 :(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)