问题Lambda 表达式作为类模板参数 https://stackoverflow.com/questions/5849059/lambda-expressions-as-class-template-parameters询问是否可以使用 lambda 表达式作为类模板参数。
问题的答案是否定的。然而,它是关于 C++11 的。
新标准 C++14 中情况是否有所改变?
不,C++14 中的情况根本没有改变,事实上章节中的语言5.1.2
Lambda 表达式段落2已收紧:
lambda 表达式不得出现在未计算的操作数中(子句
5)。
to:
[...]lambda 表达式不应出现在未计算的操作数中
(第 5 条)、在模板参数中、在别名声明中、在
typedef 声明,或者在函数或函数的声明中
模板位于其函数体和默认参数之外。 [注:
目的是防止 lambda 出现在签名中。 -结尾
笔记 ][...]
缺陷报告 1607。模板参数中的 Lambda 表达式 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1607导致这种变化。
缺陷报告只是间接地阐述了不允许这样做的理由,但我们可以在 中找到关于为什么不允许这样做的非常详细的解释。在未评估的上下文中不允许使用 lambda 表达式的基本原理 https://groups.google.com/forum/#!msg/comp.lang.c++.moderated/J9MbhcOrAzY/XjKeWEbU1EcJ。原因归结为:
-
Lambda 表达式没有独特的类型
- Compiler implementation issues:
- 比如非凡的扩张
SFINAE
- 可能需要命名破坏 lambda 的整个主体。
考虑到这一限制的理由,它似乎不太可能改变。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)