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

类定义: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 = 0;
 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 = 0;
 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 = 0;
 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(0==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(0==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 = 0;
 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

时间: 2024-11-10 13:39:02

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

iOS开发————对象间通信之block

一.block的概念: 别称:代码段,块,闭包,是苹果公司添加到OC语言中的. 作用:在程序运行的过程中保存一段代码,并且这段代码可以进行传递. 应用:用于对象间的通信. 二.block的语法: 和函数指针的语法相似 要设定block的返回值和参数个数及类型. (1)定义: 无参无返回值的block变量:void (^myBlock)(void) 有参数有返回值的block变量 int (^sumBlock)(int, int); (2)赋值: myBlock = ^{ //block中的代码

[译]ABP框架v2.0 和 ABP商业版

ABP框架v2.0 和 ABP商业版 ABP框架2.0版已经在本周公布.这篇文章解释了为什么我们发布了一个抢先主版本,和2.0版本中的变化. 除了v2.0版本,我们很高兴地宣布ABP商业版,这是建立在开源ABP框架的之上的一套专业的模块,工具,主题和服务. ABP框架V2.0 为什么2.0,而不是1.2? 本来在V1.1.2发布后计划发布1.2版.然而,有报告称1.x版在Linux上有一些性能和稳定性问题,尤其是当应用程序部署在低配CPU和内存的Linux容器上. 我们深入研究了这一问题,并已查

Android组件间通信框架EventBus

事件总线EventBus模式概述 在不使用事件总线的情况下: 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容.这种场景常见的解决方式就是定义一个接口,需要关注该事件的控件来实现这个接口.然后事件触发的地方来注册/取消注册这些对该事件感兴趣的控件.例如,陌陌依赖手机位置信息来获取附近的用户,所以在位置更新管理器(MmLocationManager)中定义了一个接口来监听位置更新的事件(MmLocationListener): interface MmLocationListene

第23条:通过委托与数据源协议进行对象间通信

第4章:协议与分类 Objective-C 语言有一项特性叫做"协议"(protocol),它与 Jave 的 "接口"(interface)类似.Objective-C 不支持多重继承,因而我们把某个类应该实现的一系列方法定义在协议里面.协议最为常见的用途是实现委托模式,不过也有其他用法.理解并善用协议可令代码变得更易维护,因为协议这种方式能很好的描述接口. "分类"(category)也是 Objective-C 的一项重要语言特性.利用分类

第23条:通过委托与数据源协议进行对象间通信

Objective-C语言特性:协议(protocol),它与Java的“接口”(interface)类似. Objective-C不支持多继承,但可以把类的实现方法定义在协议里面. 协议最为常见的用途是实现委托模式(Delegate pattern). 委托模式(Delegate pattern): 用来实现对象间的通信, 该模式的主旨是:定义一套接口,某对象若想授受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”(delegate).而这“另一对象”则可以给其委托对象回传一些消息,也

Android 框架炼成 教你怎样写组件间通信框架EventBus

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41096639 .本文出自:[张鸿洋的博客] 1.概述 关于Eventbus的介绍.前面已经有两篇:Android EventBus实战 没听过你就out了和Android EventBus源代码解析 带你深入理解EventBus . 假设你觉得还有问题,没关系,接下来我带大家手把手打造从无到有的编写这种框架~~~ 首先我们回想一下,这玩意就是在register时,扫描类中复合命

Android 框架炼成 教你如何写组件间通信框架EventBus

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41096639 ,本文出自:[张鸿洋的博客] 1.概述 关于Eventbus的介绍,前面已经有两篇:Android EventBus实战 没听过你就out了和Android EventBus源码解析 带你深入理解EventBus , 如果你觉得还有问题,没关系,接下来我带大家手把手打造从无到有的编写这样的框架~~~ 首先我们回顾一下,这玩意就是在register时,扫描类中复合命

iOS开发————对象之间通信之代理协议

一.代理实现对象间通信: 确定谁是代理对象,谁是被代理对象. 事件在哪里发生?谁就是被代理对象 事件在哪里响应?谁就是代理对象 需求: 举例:保姆照顾小孩,当小孩脏了时给她清洁,当小孩不开心时陪玩. 被代理类 Child 定义代理属性(id),并且此代理属性要遵守协议 事件发生时,要调用代理属性的协议方法来响应这个事件. 代理类 Nanny 要遵守协议 实现协议方法,协议方法中的内容就是对事件做出的响应. 代理设计模式解决是程序架构上的问题,使程序架构更合理,更具扩展性,降低类与类之前的耦合性.

成熟的C#网络通信框架介绍——ESFramework通信框架

ESFramework通信框架是一套性能卓越.稳定可靠.强大易用的跨平台C#网络通信框架,支持应用服务器集群.其内置了消息的收发与自定义处理(支持同步/异步模型).消息广播.P2P通道.文件传送(支持断点续传).心跳检测.断线重连.登录验证.在线用户管理.好友与群组管理.性能诊断等功能.基于ESFramework通信框架,您可以方便快捷地开发出各种优秀的网络通信应用.此外,我们在长期实践中所积累的丰富经验,更将成为您强大的技术保障,从开发到上线直至后续运维,全程为您保驾护航,让您高枕无忧.具体而