版权所有 © 2009-2012 Lorenzo Caminiti
根据 Boost 软件许可证版本 1.0 分发(参见随附文件 LICENSE_1_0.txt 或 https://boost.ac.cn/LICENSE_1_0.txt 上的副本)
目录
此库允许在其他函数内部以及直接在其所需的作用域内以局部方式编程函数。
局部函数(又名 嵌套函数)是一种 信息隐藏 形式,它们对于将过程任务划分为仅在局部有意义的子任务非常有用,避免使用与这些部分无关的函数、变量等来使程序的其他部分混乱。因此,局部函数补充了其他结构可能性,例如命名空间和类。局部函数是许多编程语言的一项功能,特别是 Pascal 和 Ada,但在 C++03 中缺失(另见 [N2511])。
使用 C++11 lambda 函数,可以通过命名 lambda 函数并将它们赋值给局部变量来实现局部函数。例如(另见 add_cxx11_lambda.cpp
)
int main(void) { // Some local scope. int sum = 0, factor = 10; // Variables in scope to bind. auto add = [factor, &sum](int num) { // C++11 only. sum += factor * num; }; add(1); // Call the lambda. int nums[] = {2, 3}; std::for_each(nums, nums + 2, add); // Pass it to an algorithm. BOOST_TEST(sum == 60); // Assert final summation value. return boost::report_errors(); }
此库允许在 C++03 和 C++11 之间移植局部函数(并且在 C++11 编译器上的性能与 lambda 函数相当)。例如(另见 add.cpp
)
int main(void) { // Some local scope. int sum = 0, factor = 10; // Variables in scope to bind. void BOOST_LOCAL_FUNCTION(const bind factor, bind& sum, int num) { sum += factor * num; } BOOST_LOCAL_FUNCTION_NAME(add) add(1); // Call the local function. int nums[] = {2, 3}; std::for_each(nums, nums + 2, add); // Pass it to an algorithm. BOOST_TEST(sum == 60); // Assert final summation value. return boost::report_errors(); }
此库支持局部函数的以下功能
请参阅 替代方案 部分,了解此库、C++11 lambda 函数、Boost.Phoenix 和实现与局部函数相关的功能的其他 C++ 技术之间的比较。