zoukankan      html  css  js  c++  java
  • std::function

    类模板std::function是一个多态函数封装器。std::function的实例能存储、复制及调用任何可调用(Callable) 目标——函数、 lambda表达式、 bind表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。(摘自http://zh.cppreference.com/w/cpp/utility/functional/function

    个人感觉,std::function实现的功能和函数指针差不多,使用起来也很像,只不过std::function是模板,用起来的样子和模板用起来差不多。std::function可以统一lambda表达式和普通函数,方便加入到map等容器中,方便使用。

    简单实现代码:

    int add(int a, int b)
    {
        return a + b;
    }
    
    int main()
    {
        std::map<std::string, std::function<int(int,int)>> fun_map;
    
        std::function<int(int, int)> func_add = add;
        std::function<int(int, int)> func_sub = [](int a, int b)->int { return a - b; };
        
        fun_map.insert(std::pair<std::string, std::function<int(int, int)>>("ADD", func_add));
        fun_map.insert(std::pair<std::string, std::function<int(int, int)>>("SUB", func_sub));
        
        std::cout << "2+3=" << fun_map["ADD"](2, 3) << std::endl;
        std::cout << "3-1=" << fun_map["SUB"](3, 1) << std::endl;
    
        return 0;
    }

    以上为个人愚见,欢迎指正。

  • 相关阅读:
    隐式类型转换
    STL::allocator rebind
    Proxy Class(代理类)
    C++ 没有合适的默认构造函数(无参数构造函数)
    E
    C
    Multiplication Puzzle POJ
    Brackets POJ
    Halloween Costumes LightOJ
    ACwing 139. 回文子串的最大长度(二分+Hash)
  • 原文地址:https://www.cnblogs.com/TinyGreen/p/8359556.html
Copyright © 2011-2022 走看看