#include <boost/function.hpp>
#include <boost/bind.hpp>
class PetDbMgr
{
public:
void ErrMsg(const std::string& msg, int code);
};
void PetDbMgr::ErrMsg(const std::string& msg, int code)
{
printf("%s, %d\n", msg.c_str(), code);
}
void method1(PetDbMgr *pet)
{
typedef void (PetDbMgr::*FUNA_HANDLE)(const std::string&, int);
FUNA_HANDLE handle = &PetDbMgr::ErrMsg;
std::string s = "method1";
(pet->*handle)(s, 1);
}
//利用boost库
void method2(PetDbMgr& pet)
{
typedef boost::function<void(const std::string& msg, int code)> HANDLE_FUNCB;
HANDLE_FUNCB handle = boost::bind(&PetDbMgr::ErrMsg, pet, _1, _2);
std::string s = "method2";
handle(s, 2);
}
int _tmain(int argc, _TCHAR* argv[])
{
PetDbMgr pet;
method1(&pet);
method2(pet);
getchar();
return 0;
}