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的,但是程序运行就会段错误!!!

所以严格对照好函数指针的格式。

 

posted @ 2020-02-24 21:41  ren_zhg1992  阅读(199)  评论(0)    收藏  举报