#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只能存活...
std::function<void(conststd::string&)>f1;std::function<void(conststd::string&)>f2;bool eq=f1.target<void(*)(conststd::string&)>()==f2.target<void(*)(conststd::string&)>()
#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...
// 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也没义务提供=...
可以用std::function::target()反射出存储的指针。如果你存储的类型有lambda或者函数对象,那本来也没法...
_ArgTypes2> bool operator!=(const function<_R2(_ArgTypes2...)>&) const = delete; public: // function invocation: _Rp operator()(_ArgTypes...) const; #ifndef _LIBCPP_NO_RTTI // function target access: const std::type_info& target_type() const _NOEXCEPT; template <typename _Tp>...
不要和 std::function 配合就好,——事实上这些 API 都是纯 C 的,相比 std::function,此时用...