这篇文章主要介绍了c++传递函数指针和bind的示例,需要的朋友可以参考下
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 pointe来源gaodai$ma#com搞$$代**码)网r into map
auto funBind = std::bind(f, this, std::placeholders::_1, std::placeholders::_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::placeholders::_1, std::placeholders::_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> m_mapFun;
};
int _tmain(int argc, _TCHAR* argv[])
{
TestClass tc;
tc.InitAndTest();
tc.CallBindFun(64, 128);
}
以上就是c++传递函数指针和bind的示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!