1.绑定全局函数
[
#include <iostream>
#include <functional>
typedef std::function<void(int, int)> callback;
void fun(int n1, int n2)
{
OutputDebugString(L"fun");
}
使用:
std::function<void(int, int)> ss1 = std::bind(fun, std::placeholders::_1, std::placeholders::_2);
ss1(1,2);
std::function<void(int)> ss2 = std::bind(fun, std::placeholders::_1, 2);
ss2(1);
std::function<void(int)> ss3 = std::bind(fun, 1, std::placeholders::_1);
ss3(2);
std::function<void()> ss4 = std::bind(fun, 1, 2);
ss4();
auto ss5 = std::bind(fun, std::placeholders::_1, std::placeholders::_2);
ss5(1, 2);
std::function<void(int, int)> ss6 = std::bind(fun2, std::placeholders::_1, 2, std::placeholders::_2);
ss6(1,3);
]
2.绑定static成员函数
[
#include <iostream>
#include <functional>
typedef std::function<void(int, int)> callback;
void fun(int n1, int n2)
{
OutputDebugString(L"fun");
}
class CTest
{
public:
CTest()
{
}
~CTest()
{
}
void test_fun(int n1, int n2)
{
OutputDebugString(L"test_fun");
}
static void static_test_fun(int n1, int n2)
{
OutputDebugString(L"static_test_fun");
}
};
使用:
//static静态成员
callback ss7 = std::bind(CTest::static_test_fun, std::placeholders::_1, std::placeholders::_2);
ss7(1, 2);
]
3.绑定成员函数
[
#include <iostream>
#include <functional>
typedef std::function<void(int, int)> callback;
class CTest
{
public:
CTest()
{
}
~CTest()
{
}
void test_fun(int n1, int n2)
{
OutputDebugString(L"test_fun");
}
static void static_test_fun(int n1, int n2)
{
OutputDebugString(L"static_test_fun");
}
};
使用:
//成员
CTest test;
callback ss8 = std::bind(&CTest::test_fun, &test, std::placeholders::_1, std::placeholders::_2);
ss8(1, 2);
]
---------------------------------------------------
完整代码:
#include <iostream>
#include <functional>
typedef std::function<void(int, int)> callback;
void fun(int n1, int n2)
{
OutputDebugString(L"fun");
}
void fun2(int n1, int n2, int n3)
{
OutputDebugString(L"fun2");
}
class CTest
{
public:
CTest()
{
}
~CTest()
{
}
void test_fun(int n1, int n2)
{
OutputDebugString(L"test_fun");
}
static void static_test_fun(int n1, int n2)
{
OutputDebugString(L"static_test_fun");
}
};
使用:
//std::bind使用
std::function<void(int, int)> ss1 = std::bind(fun, std::placeholders::_1, std::placeholders::_2);
ss1(1,2);
std::function<void(int)> ss2 = std::bind(fun, std::placeholders::_1, 2);
ss2(1);
std::function<void(int)> ss3 = std::bind(fun, 1, std::placeholders::_1);
ss3(2);
std::function<void()> ss4 = std::bind(fun, 1, 2);
ss4();
auto ss5 = std::bind(fun, std::placeholders::_1, std::placeholders::_2);
ss5(1, 2);
std::function<void(int, int)> ss6 = std::bind(fun2, std::placeholders::_1, 2, std::placeholders::_2);
ss6(1,3);
//static静态成员
callback ss7 = std::bind(CTest::static_test_fun, std::placeholders::_1, std::placeholders::_2);
ss7(1, 2);
//成员
CTest test;
callback ss8 = std::bind(&CTest::test_fun, &test, std::placeholders::_1, std::placeholders::_2);
ss8(1, 2);