std::function
百度知道上的用法
// function::target example
#include <iostream> // std::cout, std::boolalpha
#include <functional> // std::function, std::plus, std::minus
int my_plus (int a, int b) {return a+b;}
int my_minus (int a, int b) {return a-b;}
int main () {
std::function<int(int,int)> foo = my_plus;
std::function<int(int,int)> bar = std::plus<int>();
// calling using functional form:
std::cout << foo(100,20) << '\n';
std::cout << bar(100,20) << '\n';
// calling by invoking target:
std::cout << (*foo.target<int(*)(int,int)>())(100,20) << '\n';
std::cout << (*bar.target<std::plus<int>>())(100,20) << '\n';
// changing target directly:
*foo.target<int(*)(int,int)>() = &my_minus;
std::cout << foo(100,20) << '\n';
return 0;
}//你可以上cplusplus网站上看
int my_plus (int a, int b) {return a+b;}
int my_minus (int a, int b) {return a-b;}
int main()
{
std::function<int(int, int)> foo = my_plus;
uintptr_t pf = reinterpret_cast<uintptr_t>(*foo.target<void(*)(int, int)>());
printf("%x\n", pf);
return 0;
}
在实际的用法上有个不容易发现的致命问题:
在取target的时候,类型用的和初始化的时候不一样,编译时是OK的,但是程序运行就会段错误!!!
所以严格对照好函数指针的格式。

浙公网安备 33010602011771号