C++应用系列:利用装饰器模式进行运行时间测试

突破编程_C++_设计模式(装饰器模式) C++ 设计模式:装饰器模式 阅读详情

在平常做实验时,经常会遇到需要测试某个函数或个模块的运行时长,基本上每次都是在模块前后添加测时间的函数,然后输出查看,这样的工作相当繁琐,然而每次测试还是这样做的。

今天上网看到AOP相关,发现可以用AOP添加测时间功能。
又看到了代理模式和装饰器模式,发现应用装饰器模式似乎可以简单实现。

class VBase
{
public:
    virtual ~VBase(){}
    virtual void do_test() = 0;
};

class TimeTest:public VBase
{
public:
    TimeTest(VBase *p):m_ptr(p){}
    ~TimeTest()
    {
        delete m_ptr;
        m_ptr = nullptr;
    }
    virtual void do_test() override
    {
        cout << "begin the function..." << endl;
        auto time_begin = chrono::steady_clock::now();
        m_ptr->do_test();
        auto time_end = chrono::steady_clock::now();
        cout << "end the function..." << endl;
        auto duration = chrono::duration_cast<chrono::milliseconds>(time_end - time_begin);
        cout << "Cost Time(ms):  " << duration.count() << std::endl;
    }
private:
    VBase *m_ptr;
};

class class_to_test:public VBase
{
public:
    void do_test()
    {
        Sleep(1000);//放入需要测试时间的函数
    }
};



int main()
{
    //test2();

    shared_ptr<VBase> test = make_shared<TimeTest>(new class_to_test());
    test->do_test();
    return 0;
}

测试时间则使用TimeTest类,如果需要其他功能则可以另外创建类,继承于VBase,同时智能指针参数为该类。
输出:
begin the function…
end the function…
Cost Time(ms): 1000

略微有点搞不清装饰器模式、代理模式、AOP之间的差别。
个人理解是:
装饰器模式:给某一个类增加功能,不改变原有类,需要新功能了才利用装饰类去装饰,重点在于能够不改变原类功能而获得新功能。使用时用户将被装饰类作为参数传入给装饰器。
代理模式:访问类时增加控制权限,为原类服务的,重点在于原类。使用时,将用户与原类隔离,用户直接访问代理类,并不知道原类的细节。
AOP:面向切面编程,是否可以理解为,代理模式是AOP的一种简单实现?

C++装饰器模式实战:动态扩展对象功能的灵活设计 在面向对象编程中,设计模式是解决常见软件设计问题的可复用方案。装饰器模式作为一种结构型模式,其核心原理是通过组合而非继承的方式,在不修改原有对象结构的前提下,动态地、透明地为对象添加额外的职责。这一模式遵循开闭原则,对扩展开放,对修改关闭,具有极高的技术价值。它特别适用于需要灵活组合功能、避免类爆炸的场景,例如在流处理、网络通信层、游戏渲染系统或数据管道中,为核心组件动态添加日志、加密、压缩、缓存等横切关注点。在C++中,通过定义抽象组件接口、具体组件实现、抽象装饰器基类以及具体装饰器类,并利用智能指针管理 阅读详情

相关推荐

【C++实战㊹】解锁C++装饰器模式:实战与技巧全解析

本文围绕 C++ 装饰器模式展开实战解析,先阐述其概念:定义为动态给对象加额外职责,适用于灵活扩展功能、避免子类爆炸场景,结构包含抽象组件等四类角色。接着介绍实战应用,给出实现代码,对比与继承的差异,说明嵌套使用方法。还分享透明性设计等实战技巧,最后通过文本编辑器功能扩展项目,展示用装饰器模式实现基础编辑及动态添加格式功能,并测试多层装饰效果,助力开发者掌握该模式。

邓邓子的博客 995

【C++学习笔记】计算函数运行时间的七种方法

目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但是各种计时函数的精度不一样.下面对各种计时函数,做些简单记录. 方法1,利用time()函数 time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从C...

blue丶的博客 1万+

如何在现代C ++中编写装饰器函数-C/C++开发

类似于C ++ Python的装饰器如何在现代C ++ 14或更高版本中编写装饰器函数跨MSVC,GNU CC和Clang编译器的作品跳过本教程,并查看最终结果教程演示实用演示编译C ++类似于Python的装饰器如何编写装饰器现代C ++ 14或更高版本中的函数跨MSVC,GNU CC和Clang编译器的作品跳过本教程并查看最终结果教程演示实用演示编译时修饰器演示运行时成员函数演示可重用成员函数演示目标Python具有一个不错的功能,它允许功能定义被其他现有功能包装。 “包装”包括将一个函数作为参数并返回一个新的聚合

C++ 使用装饰器统计函数运行时长,无需写很多代码

flyfish

二分掌柜的 1109

从音频录制到智能手表:Sigma-Delta ADC是如何在低功耗场景下‘欺骗’噪声的?

本文深入解析Sigma-Delta ADC在智能穿戴设备中的低功耗高精度实现原理,重点介绍其通过过采样和噪声整形技术‘欺骗’噪声的独特方法。以TWS耳机和医疗级健康监测为例,展示该技术如何在有限功耗预算下实现专业级信号采集,为消费电子设计提供关键解决方案。

weixin_30825581的博客 389

yakit 通过codec 解决RSA加密

靶场就不过多叙述,具体的可以看yakit系列的前几篇文章。yakit 热加载进行 RSA 加密如何显示想要的payloads。

Arkmornings的博客 2687

C++设计模式::装饰模式or代理模式or面向切片编程(AOP)

一个实例 装饰模式:动态地给一个对象(而非一个类)添加一些额外的职责。就增加功能来说,装饰模式比创建子类更加灵活,因为有时我们的需求是给某个对象而不是整个类添加一些功能,比如为一部手机添加增加挂件、屏幕贴膜等等特性,一种比较灵活的方式,将手机(被装饰器类)嵌入到另一个对象(装饰器类)中(两者之间是一种组合关系),有这个对象(装饰器类)完成对象新特性的添加。如上面的装饰器UML类图所示,装饰器类

3270

【商业化】【msix打包】Python 应用打包为 MSIX 的正确流程:入口点问题与解决方案

发现用msix打包工具打包python做的exe时总找不到程序入口点,后来理了一下才发现自己误会了,需要先生成一个基本的setup.exe,msix的打包是基于这个初始的安装程序进行的。只需要点击Buile-》Compile,然后Open Output Folder就可以得到exe安装程序了。可以使用免费工具inno setup来创建初始安装包。其中{group}这样的变量会自动匹配,不用自己指定。如果点击Run会运行安装程序。

每日出拳老爷子的博客 1105

设计模式之装饰器模式(C++实现)

装饰器模式介绍,包括应用场景,优缺点,模式结构,类图 以及 C++代码示例

墨1024 2053

Temporal Fusion Transformer(TFT)与扩散模型融合:时间序列预测新范式

本文探讨了Temporal Fusion Transformer(TFT)与扩散模型融合的时间序列预测新范式。该融合方案利用TFT强大的特征提取与可解释性,为扩散模型提供精准的“导航图”,从而在噪声数据中实现鲁棒预测,并原生支持不确定性量化,输出完整的概率分布与置信区间,为金融、能源等领域的风险决策提供更可靠的依据。

weixin_29096377的博客 291

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1147

设计模式:装饰器模式(C++实现)

首先先上结论:装饰器模式的设计场景是为已有的类增加新的功能。有人可能会觉得有些奇怪:增加新的功能可以通过继承的方式进行实现。例如,我通过public继承把父类的东西全部继承过来,接口也全部继承过来,然后在子类的基础上增加新的接口不就行了?其实理论上确实是可以的,但是这种方式通过继承+增加功能(接口)的方式在某些情况下可能会存在冗余,而装饰器的设计模式可以减少这种冗余。例如,假设现在有两个个汽车的厂家:BWM、Benz。

zsiming的博客 497

【深度学习新浪潮】OpenClaw跟机器人行业有哪些很好的研究结合点?

OpenClaw正通过"AI大脑+机器人肢体"的深度融合,重新定义机器人与人类的交互方式和自主操作能力。近期ROSClaw框架发布、人形机器人集成和空间计算试验等进展,标志着OpenClaw已从概念验证阶段进入实际应用落地期,为机器人行业带来了自然语言控制普及化具身智能平民化和跨平台开发标准化三大变革机遇。

专注:太空算力、AI infra、异构调度、大模型成本工程 229

C++装饰器模式:原理、实现与高级应用

装饰器模式是一种结构型设计模式,通过动态包装对象来扩展功能而不修改原有结构。其核心原理是通过组合替代继承,保持开闭原则。在C++中,装饰器模式不仅能实现传统面向对象设计,还能结合模板元编程、CRTP等现代特性进行优化。从技术价值看,装饰器模式特别适合需要动态添加功能的场景,如游戏开发中的角色能力组合、日志系统的多级装饰等。通过模板装饰器和策略模式等高级实现,可以显著提升性能并增强类型安全。本文以C++为例,详细探讨了装饰器模式的各种实现变体及其在实际项目中的应用技巧。

weixin_33796205的博客 534

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2886

03、AC分析

本节我们将对之前的BUCK电路进行AC分析! 首先,我们之前的BUCK电路是开环电路,现在我们把它设计成闭环电路!电路图如下: 我们对闭环BUCK电路先瞬态仿真一下,波形如下: 然后在电路中加入小信号和波特图进行AC仿真 原理图如下: 增益为0时所对应的相位裕度为56°,这个相位裕度一定要大于0°,大于45°则比较稳定! ...

soumns丶涛的博客 3519

C++装饰器模式:原理、实现与性能优化

装饰器模式是一种结构型设计模式,通过组合而非继承的方式动态扩展对象功能。其核心原理是创建一个装饰器类包装原始对象,在不改变接口的前提下添加新行为。在C++这类静态语言中,装饰器模式特别有价值,它能弥补运行时扩展能力的不足。从技术实现看,装饰器模式常用于处理横切关注点(cross-cutting concerns)如日志记录、性能监控等场景。现代C++中的模板、RAII等特性为装饰器模式带来了更多高效实现方式,如编译时装饰器可避免虚函数调用开销。合理使用装饰器模式能提升代码的可维护性和扩展性,特别是在需要动态

weixin_32821533的博客 249

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++应用系列:仿AOP与匿名对象实现运行时间测试

之前通过装饰器模式实现了打印运行时间,使用起来稍微方便一些了,但是每次测试时还需要创建一个新的时间测试类继承于基类,并在该类成员函数中调用实际需要测时间的函数。 在看AOP时发现还有另一种实现方式: template &lt;class T&gt; class BaseAspect { T* m_ptr; protected: BaseAspect(T* ptr):m_ptr(...

uestc_chenmo的博客 345

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++装饰器模式:原理、实现与应用场景

装饰器模式是一种结构型设计模式,通过动态包装对象的方式扩展功能而不修改原有结构。其核心原理是建立装饰器与被装饰组件的继承关系,通过组合实现功能的层层叠加。在C++中,模板特性为装饰器模式带来了更灵活的实现方式,如模板化装饰器和编译时装饰器。这种模式特别适用于需要动态添加功能的场景,如日志记录、性能监控等横切关注点。现代C++结合智能指针和lambda表达式,进一步优化了装饰器的内存管理和实现简洁性。在实际工程中,装饰器模式既能保持代码的开闭原则,又能避免类爆炸问题,是扩展对象功能的优雅解决方案。

weixin_33600816的博客 200

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++装饰器模式:原理、实现与优化技巧

装饰器模式是面向对象编程中重要的结构型设计模式,它通过动态组合而非继承的方式扩展对象功能。该模式的核心原理是创建一个装饰器类包装原始对象,在不修改原有接口的前提下添加新行为。在C++中,装饰器模式常用于需要灵活扩展功能的场景,如UI组件装饰、网络中间件等。现代C++通过智能指针、模板元编程等技术优化了传统装饰器实现,解决了内存管理和性能问题。结合C++20新特性如Concepts和Coroutines,装饰器模式能更优雅地处理异步操作和类型约束。对于需要动态添加职责又不希望使用继承的系统,装饰器模式提供了理

weixin_32175665的博客 185

C++设计模式之装饰器模式:以家具生产为例

摘要:装饰器模式是一种在不改变原有类结构的前提下,通过动态添加装饰对象来扩展功能的灵活设计模式。以家具生产为例,基础家具(如椅子、桌子)作为核心组件,刷漆、雕花等工艺作为装饰器独立实现,通过组合方式实现各种装饰效果,避免了继承带来的类爆炸问题。该模式具有灵活扩展、动态组合和单一职责等优势,适用于需要动态添加功能的场景,如IO流处理、GUI组件装饰等。代码示例展示了如何通过装饰器层层包裹实现家具的多样化装饰效果。

ZouZou的专栏 887

设计模式:结构型-装饰器模式

目录第一章 装饰器模式介绍第二章 装饰器模式实现2.1、关系依赖图2.2、图形接口类2.3、图形实现类2.4、图形修饰者接口类2.5、图形修饰者实现类2.6、最终测试类第三章 装饰器模式应用 第一章 装饰器模式介绍 装饰器模式的介绍: 在软件开发过程中,有时想用一些现存的组件,这些组件可能只是完成了一些核心功能,但在不改变其结构的情况下,可以动态地扩展其功能,所有这些都可以釆用装饰器模式来实现。装饰器模式(Decorator Pattern)的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职

轻松的小希 1614

10分钟掌握pybind11装饰器模式:从C++函数到Python接口的优雅转换

pybind11是一个轻量级的C++库,它提供了C++11与Python之间无缝的互操作性,让开发者能够轻松地将C++代码封装为Python模块。通过pybind11的装饰器模式,你可以快速实现C++函数到Python接口的转换,无需处理复杂的底层细节。 ## 为什么选择pybind11装饰器模式? pybind11相比传统的Boost.Python具有显著优势。从编译时间来看,当函数数量增加

gitblog_00621的博客 473

[设计模式、C++、go]结构型模式:装饰器模式

文章目录装饰器模式介绍 装饰器模式 介绍

这是书生呀 643

C++装饰器模式:从基础到高级应用

装饰器模式是面向对象编程中重要的结构型设计模式,它通过动态包装对象的方式扩展功能而不修改原有结构。该模式的核心原理在于保持接口一致性的前提下,通过组合关系实现功能的层层叠加。在C++中,装饰器模式可以基于继承体系实现,也能利用模板元编程在编译期完成装饰,还能结合std::function实现运行时灵活装饰。这种模式特别适用于需要动态添加功能的场景,如GUI控件扩展、网络协议栈增强等。现代C++特性如模板、智能指针和函数式编程为装饰器模式带来了更高效的实现方式,同时也解决了传统实现中的对象生命周期管理和类型安

weixin_33585822的博客 148

C++装饰器模式:动态扩展对象功能的实践指南

装饰器模式是一种结构型设计模式,通过在运行时动态地为对象添加额外职责,而无需修改其原始类结构。其核心原理是通过组合替代继承,将功能封装在独立的装饰器类中,实现功能的灵活组装与拆卸。在C++等静态语言中,装饰器模式特别适合需要动态扩展功能的场景,如GUI组件增强、流处理管道构建等。现代C++特性如智能指针、移动语义和模板元编程,可以优化装饰器模式的实现效率与安全性。结合金融交易系统、网络数据包处理等实际案例,装饰器模式展现了其在保持代码开闭原则、避免类爆炸方面的独特技术价值。

weixin_31960565的博客 282
上一篇: 不务正业系列:看STL中迭代器与traits时突然想到decltype
下一篇: C++应用系列:仿AOP与匿名对象实现运行时间测试
uestc_chenmo
博客等级 码龄10年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值