类定义:CMemberFuncPointer

=======================================================================

  1. // MemberFuncPointer.h: interface for the CMemberFuncPointer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #if !defined(AFX_MEMBERFUNCPOINTER_H__4D78718D_778E_4427_BBC1_C5F2D52C64E5__INCLUDED_)
  6. #define AFX_MEMBERFUNCPOINTER_H__4D78718D_778E_4427_BBC1_C5F2D52C64E5__INCLUDED_
  7.  
  8. #if _MSC_VER > 1000
  9. #pragma once
  10. #endif // _MSC_VER > 1000
  11.  
  12. // 成员函数指针最大长度
  13. #define MEMBER_FUNC_POINTER_MAX_SIZE 32
  14. class CMemberFuncPointer
  15. {
  16. public:
  17. void Reset();
  18. void Set(const void*pFunc,int p_size);
  19. void Get(void*pFunc);
  20. CMemberFuncPointer();
  21. CMemberFuncPointer(const char pointerdata[],int p_size);
  22. CMemberFuncPointer(void* pointerdata,int p_size);
  23. virtual ~CMemberFuncPointer();
  24.  
  25. bool operator==(const CMemberFuncPointer &mfp) const;
  26. bool operator!=(const CMemberFuncPointer &mfp) const;
  27.  
  28. CMemberFuncPointer& operator=(const CMemberFuncPointer &mfp);
  29.  
  30. private:
  31. int m_size;
  32. char m_pointer_data[MEMBER_FUNC_POINTER_MAX_SIZE];
  33. };
  34.  
  35. #endif // !defined(AFX_MEMBERFUNCPOINTER_H__4D78718D_778E_4427_BBC1_C5F2D52C64E5__INCLUDED_)

MemberFuncPointer.h

  1. // MemberFuncPointer.cpp: implementation of the CMemberFuncPointer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "stdafx.h"
  6. #include "OverlapRoutine.h"
  7. #include "MemberFuncPointer.h"
  8.  
  9. #ifdef _DEBUG
  10. #undef THIS_FILE
  11. static char THIS_FILE[]=__FILE__;
  12. #define new DEBUG_NEW
  13. #endif
  14.  
  15. //////////////////////////////////////////////////////////////////////
  16. // Construction/Destruction
  17. //////////////////////////////////////////////////////////////////////
  18.  
  19. CMemberFuncPointer::CMemberFuncPointer()
  20. {
  21. this->m_size = ;
  22. }
  23.  
  24. CMemberFuncPointer::CMemberFuncPointer(const char pointerdata[],int p_size)
  25. {
  26. if(p_size<=MEMBER_FUNC_POINTER_MAX_SIZE)
  27. {
  28. this->m_size = p_size;
  29. memcpy(this->m_pointer_data,pointerdata,p_size);
  30. }
  31. else
  32. {
  33. this->m_size = ;
  34. }
  35. }
  36.  
  37. CMemberFuncPointer::CMemberFuncPointer(void* pointerdata,int p_size)
  38. {
  39. if(p_size<=MEMBER_FUNC_POINTER_MAX_SIZE)
  40. {
  41. this->m_size = p_size;
  42. memcpy(this->m_pointer_data,pointerdata,p_size);
  43. }
  44. else
  45. {
  46. this->m_size = ;
  47. }
  48. }
  49.  
  50. CMemberFuncPointer::~CMemberFuncPointer()
  51. {
  52.  
  53. }
  54.  
  55. bool CMemberFuncPointer::operator==(const CMemberFuncPointer &mfp) const
  56. {
  57. if(this->m_size==mfp.m_size) //mfp.m_size 可以访问私有成员
  58. {
  59. if(==memcmp(this->m_pointer_data,mfp.m_pointer_data,this->m_size))
  60. {
  61. return true;
  62. }
  63. }
  64.  
  65. return false;
  66. }
  67.  
  68. bool CMemberFuncPointer::operator!=(const CMemberFuncPointer &mfp) const
  69. {
  70. if(this->m_size==mfp.m_size) //mfp.m_size 可以访问私有成员
  71. {
  72. if(==memcmp(this->m_pointer_data,mfp.m_pointer_data,this->m_size))
  73. {
  74. return false;
  75. }
  76. }
  77.  
  78. return true;
  79. }
  80.  
  81. void CMemberFuncPointer::Get(void *pFunc)
  82. {
  83. memcpy(pFunc,this->m_pointer_data,this->m_size);
  84. }
  85.  
  86. void CMemberFuncPointer::Set(const void *pFunc,int p_size)
  87. {
  88. memcpy(this->m_pointer_data,pFunc,p_size);
  89. this->m_size = p_size;
  90. }
  91.  
  92. void CMemberFuncPointer::Reset()
  93. {
  94. this->m_size = ;
  95. }
  96.  
  97. CMemberFuncPointer& CMemberFuncPointer::operator =(const CMemberFuncPointer &mfp)
  98. {
  99. if(this != &mfp)
  100. {
  101. memcpy(this->m_pointer_data,mfp.m_pointer_data,mfp.m_size); //mfp.m_pointer_data 可以访问私有成员
  102. this->m_size = mfp.m_size; //mfp.m_size 可以访问私有成员
  103. }
  104.  
  105. return *this;
  106. }

CMemberFuncPointer.cpp

C++ 对象间通信框架 V2.0 ××××××× 之(四)的更多相关文章

  1. C++ 对象间通信框架 V2.0 ××××××× 之一

    V2.0 主要是信号槽连接的索引性能做了改进,新设计了程序构架实现了多级分层索引,索引时间性能基本不受连接表的大小影响. 类定义:CSignalSlot C_MemberFuncPointer C_s ...

  2. C++ 对象间通信框架 V2.0 ××××××× 之(三)

    类定义:CSignalSlot ======================================================================= // SignalSlo ...

  3. C++ 对象间通信框架 V2.0 ××××××× 之(五)

    类定义: ======================================================================= // MemberFuncPointer.h: ...

  4. C++ 对象间通信框架 V2.0 ××××××× 之(二)

    公共头文件:ss_type_def.h ================================================================================ ...

  5. 文件断点续传原理与实现—— ESFramework 通信框架4.0 进阶(12)

    在ESFramework通信框架 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍和ESFramework通信框架 4.0 快速上手(14) -- 聊天系统Demo,增加文件传送功能( ...

  6. C++对象间通信组件,让C++对象“无障碍交流”

    介绍 这是很久之前的一个项目了,最近刚好有些时间,就来总结一下吧! 推荐初步熟悉项目后阅读本文: https://gitee.com/smalldyy/easy-msg-cpp 从何而来 这要从我从事 ...

  7. 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)

    使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...

  8. 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]

    基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]   by:授客 QQ:1033553122 由于篇幅问题,,暂且采用网盘分享的形式: 下载地址: [授客] ...

  9. ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)

    对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑.但是,当同时在线的用户数达到几万.几十万.甚至百万的时候,我们就需要很多的服务器来分担负载.但是,依据什么规则和结构来组织这些服务器,并 ...

随机推荐

  1. keras recall

    # accuracy, fmeasure, precision,recall def mcor(y_true, y_pred): y_pred_pos = K.round(K.clip(y_pred, ...

  2. 【Linux开发】V4L2应用程序框架

    V4L2应用程序框架 V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁移.更好地了解V4L2先从应用入手,然后再深入到内核中结合物理 ...

  3. SpringBoot配置属性之Server参数

    server配置server.address指定server绑定的地址 server.compression.enabled是否开启压缩,默认为false. server.compression.ex ...

  4. 【Linux-驱动】驱动策略----自旋锁

    自旋锁 自旋锁最多只能被一个内核任务持有.要是锁未被持有,请求它的内核任务便会立即得到它并继续执行.如果一个内核任务试图请求一个已经被别的内核任务持有的自旋锁,那么CPU就会一直尽心循环---旋转-- ...

  5. 秒懂Vuejs、Angular、React原理和前端发展历史

    「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道现在流行的框架:Vue.Js.AngularJs.ReactJs,已经逐渐应用到各个项目和实际应用中,它们都是MVVM ...

  6. 极*Java速成教程 - (4)

    Java语言基础 多态 多态是面向对象的一大重要特性,如果说封装是隐藏一个类怎么做,继承是确定一系列的类做什么,那多态就是通过手段去分离做什么和怎么做. 向上转型与收窄 在开发者将一类事物封装成类以后 ...

  7. restful风格详解

    一.概念 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. REST这个词,是Roy Thomas Fielding在他 ...

  8. ubuntu 配置 tftp 服务器

    一. 安装 tftp 1.1. 安装 tftp 所需的软件. a. 安装 tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序, 在终端下输入 sudo apt-get install ...

  9. Python 入门之代码块、小数据池 与 深浅拷贝

    Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...

  10. go & Windows Service

    相关库 https://godoc.org/golang.org/x/sys/windows/svc https://github.com/kardianos/service https://gith ...