版权所有 © 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++ 技术之间的比较,请参阅 替代方案 部分。