#include<iostream>#include<functional>template<typenameT>voidprint(Tt){std::cout<<t<<std::endl;}intmain(){std::function<void(int)>f=print<int>;f(123);// 输出 123std::function<void(std::string)>g=print<std::string>;g("hello world");// 输出 hello worldreturn0;} ...
classMyClass {public://定义回调函数类型usingCallbackType = std::function<void(int)>;//向vector中添加元素voidadd(intvalue) {data_.push_back(value);}//提供一个公有函数,对vector进行遍历voidforEach(constCallbackType& callback)const{for(constauto& value : data_) {callback(value);}}private:...
printf("%d\n", *p); // 结果: 一串无意义的随机数 //此处function函数中的指针pn只能存活...
#include <functional>#include <iostream>intf(int,int){return1;}intg(int,int){return2;}voidtest(std::function<int(int,int)>const&arg){std::cout<<"test function: ";if(arg.target<std::plus<int>>())std::cout<<"it is plus\n";if(arg.target<std::minus<int>>())std::cout<<"it...
template<classF1,classF2>booltest(F1&&f1,std::function<F2>f2){auto*ptr=f2.template target<std...
// function::target example#include <iostream> // std::cout, std::boolalpha#include <functional> // std::function, std::plus, std::minusint my_plus (int a, int b) {return a+b;}int my_minus (int a, int b) {return a-b;}int main () { std::function<int...
std::function不提供对任意target的==,严格来说你不可能保证一定能知道所谓相同。boost::function比较的是target指针相等,但target是可以复制的,所以其实会漏掉一些实际相同的情况。不过至少可以知道target保证不同的情况。如果非要更加严格的相同,得自己做手脚——因为指针不同的情形下target也没义务提供=...
conststd::type_info&target_type()constnoexcept; (since C++11) Returns the type of the stored function. Parameters (none) Return value typeid(T)if the stored function has typeT, otherwisetypeid(void) Example Run this code #include <functional>#include <iostream>intf(inta){return-a;}voidg(...
std::function简介 std::function是一个函数包装器,该函数包装器模板能包装任何类型的可调用实体,如普通函数,函数对象,lamda表达式等。包装器可拷贝,移动等,并且包装器类型仅仅依赖于调用特征,而不依赖于可调用元素自身的类型。std::function是C++11的新特性,包含在头文件<functional>中。 一个std::function类型对象...
但其中有一个比较遗憾的地方,std::function在保存lambda的对象时,func_ptr是不会初始化为0的。 所以我们不能简单的先比较func_ptr再比较vtable[2],我们很大概率是需要先判断两个对象是否存在lambda,好在有std::function::target_type()可以满足我们的要求。