C++函数包装模板function
2023-09-27 14:28:42 时间
需要:#include <functional>
std::function是一个函数包装器模板,在c++11中,将function纳入标准库中,该函数包装器模板能包装任何类型的可调用元素
一个std::function类型对象实例可以包装下列这几种可调用元素类型:函数、函数指针、类成员函数指针或任意类型的函数对象(例如定义了operator()操作并拥有函数闭包)
当std::function对象未包裹任何实际的可调用元素,调用该std::function对象将抛出std::bad_function_call异常
格式:function<int(int,int)> func;
第一个int:函数返回值类型,(int,int):函数的形参类型
则 function类的实例func可以指向 返回值为int型,有两个形参都为int型的任何函数
虽然是function是类模板,但其只有成员函数,无数据成员
function的成员函数
成员函数声明 | 说明 |
---|---|
constructor | 构造函数:constructs a new std::function instance |
destructor | 析构函数: destroys a std::function instance |
operator= | 给定义的function对象赋值 |
operator bool | 检查定义的function对象是否包含一个有效的对象 |
operator() | 调用一个对象 |
调用普通函数
#include <functional> #include <iostream> int f(int a, int b) { return a+b; } int main() { std::function<int(int, int)> func ;//创建function对象 func=f; //func指向 int x=func(1,2); std::cout<<x<<std::endl; system("pause"); return 0; }
调用函数对象( 非模板类型)
#include<iostream> #include <functional> using namespace std; struct functor { int operator() (int a, int b) //重载()运算符 { return a + b; } }; int main() { functor ft; //结构体对象 function<int(int,int)> func = ft; cout<<func(1,2)<<endl; //调用对象的()运算符函数 return 0; }
调用函数对象(模板类型)
#include <iostream> #include <functional> using namespace std; template <class T> struct Minus { T operator() (T i, T j) { return i - j; } }; int main() { //function<int(int, int)> f = Minus<int>; function<int(int, int)> f ; Minus<int> M; f=M; cout << f(1, 2) << endl; return 1; }
包装模板函数
#include <iostream> #include <functional> using namespace std; template <class T> T func(T i, T j) { return i - j; } int main() { function<int(int, int)> f = func<int>; //包装函数指向模板函数 cout << f(1, 2) << endl; return 0; }
包装lambda表达式
#include <iostream> #include <functional> using namespace std; auto func = [](int i, int j){ return i - j; }; int main() { function<int(int, int)> f = func; //包装匿名函数 cout << f(10, 20) << endl; return 1; }
包装类静态成员函数(非模板类型)
#include <iostream> #include <functional> using namespace std; class A { public: static int func(int i, int j) { return i - j; } }; int main() { function<int(int, int)> f = &A::func; //包装类的静态函数 cout << f(10, 20) << endl; return 1; }
包装类静态成员函数(模板类型)
#include <iostream> #include <functional> using namespace std; class A { public: template <class T> static T func(T i, T j) { return i - j; } }; int main() { function<int(int, int)> f = &A::func<int>; //包装类的静态成员(模板类型) cout << f(1, 2) << endl; return 1; }
包装类对象成员函数(非模板类型)
#include <iostream> #include <functional> using namespace std; class A { public: int func(int i, int j) { return i - j; } }; int main() { A m; function<int(int, int)> f = bind(&A::func, &m, placeholders::_1, placeholders::_2); // // cout << f(10, 20) << endl; return 1; }
包装类对象成员函数(模板类型)
#include <iostream> #include <functional> using namespace std; class A { public: template <class T> T func(T i, T j) { return i - j; } }; int main() { A m; function<int(int, int)> f = bind(&A::func<int>, &m, placeholders::_1, placeholders::_2); cout << f(10, 20) << endl; return 1; }
相关文章
- C++的模板(和java的泛型一样)
- C++模板之函数模板实例化和具体化
- C++入门学习——模板
- Word处理控件Aspose.Words功能演示:使用 C++ 创建 MS Word 文档 (DOC/DOCX)
- Android 编译C++
- C++ virtual函数重写,在继承的时候没有在函数前写virtual关键字也依然是虚函数吗?
- C/C++中float、double类型数据正负的判断
- 60 C++ - 类模板的应用
- 59 C++ - 类模板
- 58 C++ - 模板机制剖析
- 【c++】深入学习c++中的模板
- C++自定义全部替换函数replace
- 《C++入门经典(第5版•修订版)》——6.3 do-while循环
- 《C++面向对象高效编程(第2版)》——2.27 关联
- 《C++面向对象高效编程(第2版)》——第3章3.1 类概念的基础
- 《C++ Templates中文版》——第2章 函数模板
- 《21天学通C++(第7版)》——12.8 作业
- 基于C++实现(控制台)应用二维矩阵完成矩阵运算【100010503】
- C++反射机制:可变参数模板实现C++反射(使用C++11的新特性--可变模版参数,只根据类的名字(字符串)创建类的实例。在Nebula高性能网络框架中大量应用)
- 《c++语言导学》——1.9 检验
- C++编程——类模板
- C++模板中的静态
- 引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针
- C++ 数字、string 简便互转
- C++ and Java template class and function 模板类和模板函数
- C++ 深入理解模板实现多态思想
- C++高性能服务器框架——日志系统