c++11里支持使用lambda在函数内定义本地嵌套函数,将一些算法的判断式定义为本地函数可以使代码更加清晰,同时声明和调用靠近也使得更容易维护。遗憾的是公司开发平台任然停留在vs2008,使用boost库的lambda表达式来模拟实在是有些笨拙与晦涩。
偶然在论坛上看见boost1.50版本后引入了BOOST_LOCAL_FUNCTION宏,官方简介如下:
http://www.boost.org/doc/libs/1_54_0/libs/local_function/doc/html/boost_localfunction/tutorial.html
Local Functions
Local functions are defined using macros from the header file [boost/local_function.hpp](http://www.boost.org/doc/libs/1_54_0/libs/local_function/doc/html/reference.html#header.boost.local_function_hpp)
. The macros must be used from within a declarative context (this is a limitation with respect to C++11 lambda functions which can instead be declared also within expressions):
#include <boost/local_function.hpp> // This library header.
...
{ // Some declarative context.
...
result-type BOOST_LOCAL_FUNCTION(parameters) {
body-code
} BOOST_LOCAL_FUNCTION_NAME(name)
...
}
使用宏的方式来定义了一个嵌套的函数(虽然只是看起来像),但是也使得我们有另一种选择。BOOST_LOCAL_FUNCTION使用非常简单,官方示例代码如下:
1 int main(void) { // Some local scope.
2 int sum = 0, factor = 10; // Variables in scope to bind.
3
4 void BOOST_LOCAL_FUNCTION(const bind factor, bind& sum, int num) {
5 sum += factor * num;
6 } BOOST_LOCAL_FUNCTION_NAME(add)
7
8 add(1); // Call the local function.
9 int nums[] = {2, 3};
10 std::for_each(nums, nums + 2, add); // Pass it to an algorithm.
11
12 BOOST_TEST(sum == 60); // Assert final summation value.
13 return boost::report_errors();
14 }
原文链接: https://www.cnblogs.com/xiaosuiba/p/3225845.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/97929
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!