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

时间:2021-06-18 18:34:38 


#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++,函数,指针
0
投稿

猜你喜欢

  • Java深入浅出数组的定义与使用下篇

    2022-12-04 10:27:38
  • 解决spring boot启动扫描不到自定义注解的问题

    2023-10-29 14:31:48
  • SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    2022-02-07 22:04:34
  • Volatile关键字的使用案例

    2022-01-27 16:37:05
  • mybatis批量添加,批量更新之前如何判断是否已经存在

    2022-01-03 20:33:38
  • Android SeekBar充当Progress实现兔兔进度条Plus

    2021-12-05 16:36:25
  • Java探索之Thread+IO文件的加密解密代码实例

    2023-01-26 19:07:03
  • springBoot整合rabbitMQ的方法详解

    2022-08-19 02:28:33
  • C#委托所蕴含的函数指针概念详细解析

    2023-06-03 15:26:13
  • java 正则,object中两个方法的使用(详解)

    2023-09-06 19:00:55
  • C#在复杂多线程环境下使用读写锁同步写入文件

    2021-06-16 03:45:53
  • Java 中HttpURLConnection附件上传的实例详解

    2022-05-26 13:54:39
  • Netty分布式pipeline管道创建方法跟踪解析

    2023-11-03 02:55:51
  • Android init.rc文件详解及简单实例

    2023-08-02 08:55:09
  • C#读取csv格式文件的方法

    2023-08-28 22:38:46
  • Java 方法签名详解及实例代码

    2022-02-04 05:56:06
  • c# 用ELMAH日志组件处理异常

    2022-03-11 12:05:36
  • Mybatis-Plus字段策略FieldStrategy的使用

    2023-12-13 14:44:41
  • 手写java性能测试框架第二版

    2023-03-15 14:07:31
  • jsp如何获取Session中的值

    2023-07-01 05:59:28
  • asp之家 软件编程 m.aspxhome.com