当前位置: 首页 > news >正文

Nebula3中的委托(Delegate)

April2009增加了不少好东西,这段时间准备静下心来看看

关于delegate这么个东西, 可能C++程序员很陌生, 但是Callback函数一定听说过吧? 其它两者本质上是一种东西

不过C++对于成员函数的回调实在是.....(别跟我提boost)

曾经用过fastdelegate, 确实不错. 我以为这就是C++中的完美实现了

N3中增加的这个, 不比它差, 代码量更小, 呵呵

对于N3这个面向对象用到变态(同样它也极力的避免使用模板)的引擎来说, 这个简洁却又不简单的实现是最合适的. 虽然这个版本中它只是一个孤零零的类, 不保证以后会大量使用. 通常情况下, UI系统是它发挥最强力的地方吧?

两者的比较, 作者已经说得很明白了:

fastdelegate使用了一个"漏洞", 尽管它在许多C++编译器上都能工作, 但它不符合C++标准

而这个实现呢?跟boost::function和前者相比:

  1. 很快
  2. 不用动态分配内存
  3. 跟C++标准完全兼容

不过N3中只引入一个单参数无返回值的最简单模板, 有兴趣的可以下载完整版本自己研究.

写了一个测试程序, 相信一看就会用了:

#include "util/delegate.h" using namespace Util; typedef Delegate<int> PrintCallback; void print(int i) { n_printf("function delegate: %d\n", i); } class Console { public: void Print(int i) { n_printf("method delegate: %d\n", i); } }; //------------------------------------------------------------------------------ /** */ void main(int argc, const char** argv) { PrintCallback funcPrint = PrintCallback::FromFunction<&print>(); Console console; PrintCallback methPrint = PrintCallback::FromMethod<Console, &Console::Print>(&console); funcPrint(100); methPrint(200); }

相关文章:

  • 使用微软T4 template进行代码生成
  • ora-12537教训
  • Asp.Net MVC webAPI Token based authentication
  • Asp.Net 2.0 TreeView的Checkbox级联操作
  • azure最佳实践系列1-自我修复的设计
  • Nebula3 RTTI 小技巧
  • azure 最佳实践 -- 保持冗余
  • Swift 3 打印功能
  • 还需要编写DAO代码吗?SQL+接口就足够了!(Part 1)
  • 百度关闭竞价排名部分功能,以提升用户体验
  • linux 更新nodejs到最新
  • 移动MM初探之一:苹果APP Store模式将不再赢利?
  • 七大热门商业智能产品(非开源)
  • azure 最佳实践 3--最小协同操作
  • linux-2.6.26内核中ARM中断实现详解(2)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • create-react-app做的留言板
  • JAVA并发编程--1.基础概念
  • k8s 面向应用开发者的基础命令
  • log4j2输出到kafka
  • magento2项目上线注意事项
  • overflow: hidden IE7无效
  • Vue UI框架库开发介绍
  • 安装python包到指定虚拟环境
  • 力扣(LeetCode)21
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 【云吞铺子】性能抖动剖析(二)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (SpringBoot)第二章:Spring创建和使用
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)ssm码农论坛 毕业设计 231126
  • (过滤器)Filter和(监听器)listener
  • (力扣)1314.矩阵区域和
  • (七)Java对象在Hibernate持久化层的状态
  • (转)setTimeout 和 setInterval 的区别
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .describe() python_Python-Win32com-Excel
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net 流——流的类型体系简单介绍
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net6Api后台+uniapp导出Excel
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • []FET-430SIM508 研究日志 11.3.31
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C++提高编程](三):STL初识
  • [COI2007] Sabor
  • [CSS]CSS 的背景
  • [hive] posexplode函数