【发布时间】:2011-06-06 07:05:07
【问题描述】:
我一直在审查C++11 标准的草稿版本。特别是 lambdas 部分,我对不引入多态 lambda 的原因感到困惑。
例如,在可以使用多态 lambda 的 100001 种方式中,我曾希望我们可以使用如下代码:
template<typename Container>
void foo(Container c)
{
for_each(c.begin(), c.end(), [](T& t) { ++t; });
}
原因是什么:
是委员会没时间了吗?
多态 lambda 太难实现了?
或者也许PTB 不需要它们?
注意:请记住上面的例子不是唯一的,它只是作为代码类型的指南。仅专注于为上述代码段提供解决方法的答案将不被视为有效!
相关来源:
- Lambda expressions and closures for C++(文件编号 N1968=06-0038)
- Can lambda functions be templated?
【问题讨论】:
-
该死的,多么混乱的语法。
-
语法有什么问题?它实际上相当不错。
-
@Dominar 这就是“关闭”的意思。 en.wikipedia.org/wiki/Closure_(computer_programming)
-
@Kirakun:删除所有被后来的扩展变得多余的东西(例如删除除统一初始化语法之外的所有形式的初始化)将是一个有趣的实验,保留 abstract i> 用于 C++ 非冗余子集的语法与现在相同,但设计一个新的 具体 语法更符合 Scala 和/或 Cobra 和/或 Ruby(取决于您是否更喜欢大括号、缩进或关键字)。我敢打赌,你会得到一些与 C++ 100% 同构的相当漂亮的语言。
-
嗯。我可以没有它。
[](decltype(*begin) t) { ++t; }
标签: c++ lambda c++11 standards polymorphism