![](https://img-blog.csdnimg.cn/20210118221347395.gif)
来源:微信公众号「编程学习基地」
std::function 绑定函数
绑定全局函数
#include <iostream>
#include <functional>
using namespace std;
function<void(char*)> functionTest;
void funTest(char* infoString)
{
printf("info:%s\n", infoString);
}
int main(int argc, const char* argv[])
{
functionTest = funTest;
functionTest((char*)"test1");
return 0;
}
绑定静态函数
#include <iostream>
#include <functional>
using namespace std;
function<void(char*)> functionTest;
static void funTestStatic(char* infoString)
{
printf("static info:%s\n", infoString);
}
int main(int argc, const char* argv[])
{
functionTest = funTestStatic;
functionTest((char*)"test1");
return 0;
}
绑定类的成员函数
#include <iostream>
#include <functional>
using namespace std;
class View
{
public:
void onClick(int x, int y)
{
cout << "X : " << x << ", Y : " << y << endl;
}
};
function<void(View, int, int)> clickCallback;
int main(int argc, const char* argv[])
{
View button;
clickCallback = &View::onClick;
clickCallback(button, 10, 123);
return 0;
}
std::function和C语言函数指针对比
#include <iostream>
#include <functional>
using namespace std;
function<void(char*)> functionTest;
void funTest(char* infoString)
{
printf("info:%s\n", infoString);
}
static void funTestStatic(char* infoString)
{
printf("static info:%s\n", infoString);
}
typedef void (*callback_function)(char* errString);
int main(int argc, const char* argv[])
{
functionTest = funTest;
functionTest((char*)"test1");
functionTest = funTestStatic;
functionTest((char*)"test1");
callback_function fun = funTest;
fun((char*)"test2");
fun = funTestStatic;
fun((char*)"test2");
return 0;
}