欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

c++传递函数指针和bind的示例

时间:2021-06-22 09:35:36|栏目:C代码|点击:

复制代码 代码如下:

#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::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<int (int, int)>> m_mapFun;
};


int _tmain(int argc, _TCHAR* argv[])
{
 TestClass tc;
 tc.InitAndTest();
 tc.CallBindFun(64, 128);
}

上一篇:浅谈C++中的构造函数分类及调用规则

栏    目:C代码

下一篇:常用的C语言排序算法(两种)

本文标题:c++传递函数指针和bind的示例

本文地址:http://www.codeinn.net/misctech/146114.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有