Copy Code code as follows:
#include <algorithm>
Class TestClass
{
Public
int Sub (int x, int y) {
return y-x;
}
void Initandtest () {
Printwithclassmemberfunction (&testclass::sub);
Printwithclasspointer (this);
}
Call:printwithclassmemberfunction (&testclass::sub);
void printwithclassmemberfunction (int (testclass::* f) (int, int)) {
Add ' this ' pointer
Auto rel = (this->*f) (12, 13);
AtlTrace ("[%d]\n", rel);
Bind with member function pointer into map
Auto Funbind = Std::bind (f, this, std::p laceholders::_1, std::p laceholders::_2);
m_mapfun["printwithclassmemberfunction"] = Funbind;
}
void Printwithclasspointer (TestClass *pointinstance) {
Auto rel = pointinstance->sub (20, 30);
AtlTrace ("[%d]\n", rel);
Auto Funbind = Std::bind (&testclass::sub, Pointinstance, std::p laceholders::_1, std::p laceholders::_2);
m_mapfun["Printwithclasspointer"] = Funbind;
}
void Callbindfun (int a, int b) {
Std::for_each (
M_mapfun.begin (), M_mapfun.end (), [&a, &b] (Decltype (*m_mapfun.begin ()) it) {
AtlTrace ("[%s]%d\n", It.first.c_str (), It.second (A, b));
});
}
Std::map<std::string, std::function<int (int, int) >> m_mapfun;
};
int _tmain (int argc, _tchar* argv[])
{
TestClass TC;
Tc. Initandtest ();
Tc. Callbindfun (64, 128);
}