- 浏览: 765394 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
委托机制的本质就是调用成员函数的函数指针,实现回调
委托就是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值.委托可以看作是对函数的抽象,是函数的"类".委托的实例将代表一个具体的函数.
一个委托可以搭载多个方法,所有方法被依次唤起.它可以使得委托对象所搭载的方法并不需要属于同一个类.但委托对象所搭载的所有方法必须具有相同的原形和形式.
https://blog.csdn.net/xgx198831/article/details/47171539
委托就是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值.委托可以看作是对函数的抽象,是函数的"类".委托的实例将代表一个具体的函数.
一个委托可以搭载多个方法,所有方法被依次唤起.它可以使得委托对象所搭载的方法并不需要属于同一个类.但委托对象所搭载的所有方法必须具有相同的原形和形式.
https://blog.csdn.net/xgx198831/article/details/47171539
#include <iostream> #include <vector> using namespace std; class A{ public: void fun(){ cout << "fun" << endl; } }; class B{ public: void fun(int i){ cout << "B::fun " << i << endl; } }; class C{ public: void fun(int i){ cout << "C::fun " << i << endl; } }; void fun2(int i){ cout << "fun2:" << i << endl; } template<typename T> class DelegateHandler { public: DelegateHandler(T* pT, void (T::*pFun)()): mT(pT), mFun(pFun) { } void invoke() { (mT->*mFun)(); } private: T* mT; void (T::*mFun)(); }; //none member fun template<> class DelegateHandler<void> { public: DelegateHandler(void (*pFun)(int)) { mFun = pFun; } void invoke(int i) { mFun(i); } private: void (*mFun)(int); }; class DelegateHandlerInterface { public: virtual ~DelegateHandlerInterface(){ } virtual void invoke(int i) = 0; }; template<typename T> class DelegateHandlerImpl1: public DelegateHandlerInterface { public: DelegateHandlerImpl1(T* pT, void (T::*pFun)(int)): mT(pT), mFun(pFun) { } virtual void invoke(int i){ (mT->*mFun)(i); } private: T* mT; void (T::*mFun)(int); }; int main() { A a; DelegateHandler<A> af(&a,&A::fun); af.invoke(); DelegateHandler<void> vf(&fun2); vf.invoke(3); B b; C c; vector<DelegateHandlerInterface*> v; DelegateHandlerImpl1<B> impl1(&b,&B::fun); DelegateHandlerImpl1<C> impl2(&c,&C::fun); v.push_back(&impl1); v.push_back(&impl2); for (auto it = v.cbegin(); it != v.cend(); ++it) { (*it)->invoke(7); } } fun fun2:3 B::fun 7 C::fun 7
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 814桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 834访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 675解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 633享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 443中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 584职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 587合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 431组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 559备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
建造者模式(Builder)
2014-07-23 20:45 563建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 624外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 406迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 510原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 335里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 394依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 559开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 559单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 1013MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 924代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ... -
状态模式(State)
2011-07-13 17:33 876状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像 ...
相关推荐
在编程领域,事件委托(Event Delegate)是一种设计模式,它允许我们把事件处理代码与触发事件的对象解耦。这种模式在.NET框架中尤其常见,它为面向对象编程提供了灵活的事件处理机制。在这个例子中,我们将关注如何...
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
委托在.NET框架中扮演着非常重要的角色,它是类型安全的函数指针,允许我们传递方法作为参数,或者将多个方法连接在一起形成一个事件处理链。本文将深入探讨委托的使用,特别是`Delegate`的`Invoke`方法,以及如何在...
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的。首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个...
### C#中的Delegate委托与Event事件深度解析 #### 引言 在.NET Framework中,委托(Delegate)和事件(Event)是非常重要的概念。对于初学者而言,这些概念可能较为抽象和难以理解。本文旨在通过一系列逐步深入的...
在C#编程语言中,事件和委托是两个关键概念,它们是实现对象间通信和响应机制的核心工具。本文将深入探讨这两个概念,并提供详细的解释。 首先,我们要理解什么是委托(Delegate)。委托在C#中是一种类型,它代表了...
在这个机制中,委托(Delegate)扮演了关键角色,它充当了方法的引用,使得可以在不同的线程上调用这些方法。 在C#中,委托是一种类型安全的事件处理机制,它可以被看作是指向方法的指针。在异步编程中,委托允许...
在C#编程语言中,委托(Delegate)是一个强大的特性,它允许我们将方法作为参数传递给其他方法,或者存储和调用方法的集合。这个特性在事件处理、回调函数以及实现函数式编程风格时非常有用。在本文中,我们将深入...
在C#编程中,委托(Delegate)是一种类型安全的函数指针,允许我们将方法作为参数传递给其他方法,或者存储在变量中以便稍后调用。这种机制在处理事件处理和跨对象通信时非常有用,特别是在需要在多个Form之间传递...
网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...
C#中的委托(delegate)是一种引用类型,用于封装对具有特定参数列表和返回类型的方法的引用。委托是多态的,这意味着可以引用多种类型的方法,只要这些方法与委托定义的签名相匹配。通过委托,我们可以在运行时动态...
C#中的委托是面向对象编程的一种强大特性,它允许我们将方法作为参数传递给其他方法,或者将多个方法链接在一起形成一个事件处理链。本文将深入探讨C#中的委托和事件委托的概念、用途以及它们的工作原理。 1. **...
通过实现委托,一个对象(委托者)可以通知或询问另一个对象(委托对象)来执行特定任务或响应特定事件。 委托模式的核心思想是定义一个协议,这个协议包含了委托对象需要实现的方法。这些方法通常是委托者触发的...
C#委托是.NET框架中的一种强大的特性,它允许我们封装方法作为...熟练掌握委托的声明、实例化、调用以及与事件的结合,能极大地提高开发效率和代码质量。在实际开发中,合理利用委托可以构建出优雅、可扩展的解决方案。
例如,在串口接收事件中,可以使用委托(delegate)来更新控件内容: `SetText(ASCIIEncoding.ASCII.GetString(arr));` 在上面的代码中,`arr` 是 byte[] 类型的数据,用于传递给控件内容更新方法。 使用委托...
委托提供了一种方便的方式来实现事件处理和回调函数机制,广泛应用于面向对象的程序设计中。 委托的声明类似于普通方法的声明,但它们仅仅是对符合特定签名的方法的引用。声明委托时,不需要提供方法的具体实现,只...
QT自定义模型Modle的实现实例和自定义委托Delegate的实现实例以及在QTableView中加载使用的实现
在.NET框架中,Delegate是类型安全的事件处理和回调机制的核心。它允许我们将方法作为参数传递,这在多线程编程中尤其有用,因为它提供了一种在不同线程间通信的方式。本文将深入探讨“多线程”、“Delegate委托”...