zoukankan      html  css  js  c++  java
  • c++11新特性std::function、std::bind封装可执行对象

    转载:https://www.cnblogs.com/feng-sc/p/5710724.html#title11

    std::bind和std::function也是从boost中移植进来的C++新标准,这两个语法使得封装可执行对象变得简单而易用。此外,std::bind和std::function也可以结合我们一下所说的lamda表达式一起使用,使得可执行对象的写法更加“花俏”。

      我们下面通过实例一步步了解std::function和std::bind的用法:

      Test.h文件

    复制代码
    //Test.h 示例代码1.0 http://www.cnblogs.com/feng-sc/p/5710724.html
    class Test { public: void Add() { } };
    复制代码
     

    main.cpp文件

    复制代码
    //main.cpp 示例代码1.0 http://www.cnblogs.com/feng-sc/p/5710724.html
    #include <functional> #include <iostream>
    #include "Test.h" int add(int a,int b) { return a + b; }

    int main() { Test test; test.Add(); return 0; }
    复制代码

      解释:

        上面代码中,我们实现了一个add函数和一个Test类,Test类里面有一个Test函数也有一个函数Add。

      OK,我们现在来考虑一下这个问题,假如我们的需求是让Test里面的Add由外部实现,如main.cpp里面的add函数,有什么方法呢?

      没错,我们可以用函数指针。

    我们修改Test.h

    复制代码
    //示例代码1.0 http://www.cnblogs.com/feng-sc/p/5710724.html
    class Test { public: typedef int(*FunType)(int, int); void Add(FunType fun,int a,int b) { int sum = fun(a, b); std::cout << "sum:" << sum << std::endl; } };
    复制代码

      修改main.cpp的调用

    复制代码
    //示例代码1.0 http://www.cnblogs.com/feng-sc/p/5710724.html
    ....
    ....
    Test test; test.Add(add, 1, 2);
    ....
    复制代码

      运行结果:

        

      到现在为止,完美了吗?如果你是Test.h的提供者,你觉得有什么问题?

      我们把问题升级,假如add实现是在另外一个类内部,如下代码:

    class Test
    {
    public:
        void Add(std::function<int(int, int)> fun, int a, int b)
        {
            int sum = fun(a, b);
            std::cout << "sum:" << sum << std::endl;
        }
    };
    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    基本技能训练之线程
    关于UEditor的使用配置(图片上传配置)
    PAT 乙级练习题1002. 写出这个数 (20)
    codeforces 682C Alyona and the Tree DFS
    codeforces 681D Gifts by the List dfs+构造
    codeforces 678E Another Sith Tournament 概率dp
    codeforces 680E Bear and Square Grid 巧妙暴力
    codeforces 678D Iterated Linear Function 矩阵快速幂
    codeforces 679A Bear and Prime 100 交互
    XTUOJ 1248 TC or CF 搜索
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14678542.html
Copyright © 2011-2022 走看看