易用的C++11 std::bind宏
#define BIND(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define BIND_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define BIND_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define BIND_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)
用法:
class Receiver
{
public:
bool onMessage(void *data,size_t dataSize);
}
class DataProcess
{
std::function<bool(void *,size_t)> onMessageCallBack;
public:
void register(std::function<bool(void *,size_t)> callback)
{
onMessageCallBack = callback;
}
}
int Main()
{
…
Receiver *testRecv = new Receiver();
DataProcess *testProc = new DataProcess();
testProc.register(BIND_2(Receiver::onMessage,testRecv));
//相当于:
//testProc.register(std::bind(&Receiver::onMessage,testRecv,std::placeholders::_1, std::placeholders::_2));
…
}

浙公网安备 33010602011771号