- 浏览: 721770 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1043)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (52)
- 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 (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
委托机制的本质就是调用成员函数的函数指针,实现回调
委托就是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值.委托可以看作是对函数的抽象,是函数的"类".委托的实例将代表一个具体的函数.
一个委托可以搭载多个方法,所有方法被依次唤起.它可以使得委托对象所搭载的方法并不需要属于同一个类.但委托对象所搭载的所有方法必须具有相同的原形和形式.
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 770桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 801访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 643解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 595享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 416中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 545职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 553合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 402组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 536备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
建造者模式(Builder)
2014-07-23 20:45 532建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 580外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 362迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 464原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 302里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 359依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 521开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 528单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 975MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 884代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ... -
状态模式(State)
2011-07-13 17:33 840状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像 ...
相关推荐
委托delegate invoke的简单源代码,适合委托初学者!
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的。首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个...
本ppt结合场景和实例对C#委托(delegate)的基础进行了讲解:包括了委托的定义,基本语法,同步异步调用,匿名委托的使用,泛型委托,lamda表达式,剖析了委托协变、委托逆变。对委托在.net 3.5框架中的身影进行了分析...
主要通过进度条进行解释 利用委托将界面和业务层分离的方法
C#中的事件和委托(Delegate,Event)
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就...
使用.Net 的委托机制来为我们的程序提供异步操作行为. ...public delegate string AsyncEventHandler(string name); 2步,使用委托提供的BeginInvoke, EndInvoke 方法(具体使用下一篇文章详细介绍)来提供异步的调用...
c#中关于委托delegate的经典的实例,可以使我们清楚的了解delegate的使用方法及含义。
网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...
01.C# 知识回顾 - 委托 delegate.pdf 01.C# 知识回顾 - 委托 delegate.pdf
02.C# 知识回顾 - 委托 delegate续.pdf02.C# 知识回顾 - 委托 delegate续.pdf
本文实例讲述了C#使用委托(delegate)实现在两个form之间传递数据的方法。分享给大家供大家参考。具体分析如下: 关于Delegate【代理、委托】是C#中一个非常重要的概念,向前可以推演到C++的指针,向后可以延续到匿名...
QT自定义模型Modle的实现实例和自定义委托Delegate的实现实例以及在QTableView中加载使用的实现
CSharp_Delegate C#委托 本人博客中的示例代码
但是.Net毕竟是更高级的语言,委托Delegate也更高级了,委托是一种数据接口,它包含调用目标和调用方法的指针;而在.Net中定义的委托都继承自MulticastDelegate即多播委托,所谓的多播委托是指可以包含多个调用方法...
preact-dom-delegate实现 preact 的 dom 事件委托只支持 preact 8,Preact X 可以使用安装$ npm i -S preact-dom-delegate使用说明在 JSX DOM 上设置 on 属性,值为委托处理方法,该方法会传入一个委托对象 delegate...
Delegate '委托,带参数的方法,多线程,可以轻松在线程中传递参数,获取返回值.
委托的简单理解: 参考了一些资料整合起来 写了个小程序,使您能充分理解和使用————delegate ,委托