易用的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));

}

posted @ 2016-03-25 20:07  eXSpring  阅读(237)  评论(0)    收藏  举报