• 【boost】BOOST_LOCAL_FUNCTION体验


    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 are defined using macros from the header file 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 }


     

     
  • 相关阅读:
    2017.10.20
    2017.10.14
    2017.10.19
    2017.10.18
    2017.10.17
    软件工程个人作业02
    构建之法读后感03
    构建之法阅读笔记02
    二柱子问题(随机产生四则运算题目)
    课后作业2(构建之法阅读计划)
  • 原文地址:https://www.cnblogs.com/xiaosuiba/p/3225845.html
Copyright © 2020-2023  润新知