【发布时间】:2011-11-09 19:58:24
【问题描述】:
既然 C++ 中有 lambda,我不能声明一个本地函数似乎真的很愚蠢......
例如:
我可以在函数体中声明一个类型,甚至将它初始化为一个值表。但我无法创建一个适用于该数据类型的辅助函数 - 因为我无法在函数中声明函数,也无法在函数之外引用该数据类型,因为它仅在该范围内可用。
有时将数据类型从函数中提取出来并在那里定义我的数据类型和辅助函数(本地文件范围)非常简单 - 但有时它并不是一个真正合理的解决方案 - 例如当使用引用局部范围变量(或 this)的内联 lambda 初始化表时。
知道对本地函数的支持是否即将到来,是否已经定义,或者为什么编译器编写者难以实现它们因此不是标准的一部分?
【问题讨论】:
-
本地函数会为您提供哪些使用
auto+ lambda 无法轻松实现的功能? -
局部函数比局部变量更难实现,尽管可能与实现 lambda 的方式相同。
-
在完整的 C++11 中可能什么都没有?虽然不确定是什么广告。声明一个 lambda 已经超过了一个命名的本地...似乎编译器可以处理一个,它可以处理另一个,不是吗?而且我认为规则应该是相似的——除了你不能用本地函数捕获任何东西,所以是的,更简单......
-
"虽然不确定声明 lambda 对命名的本地函数有什么好处..." 主要优点是它是合法的/受支持的,而命名的本地函数不是。 ;-]
-
@Steve : "将捕获的 lambda 转换为普通函数指针的能力" 老实说,这听起来很可怕。 ;-/