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

C++测试代码

C++测试代码

目录

    • 基于C++实现的AOP功能

基于C++实现的AOP功能

#include <iostream>
#include <string>struct LogHeader {std::string prefix;std::string aspect;
};template <typename T>
void before(const std::string& msg, const LogHeader& header) {std::cout << header.prefix << " [" << header.aspect << "]: Before " << msg << std::endl;
}template <typename T>
void after(const std::string& msg, const LogHeader& header) {std::cout << header.prefix << " [" << header.aspect << "]: After " << msg << std::endl;
}// 抽象基类代替接口
class MessageService {
public:virtual ~MessageService() = default;virtual std::string getMessage() = 0; // 纯虚函数
};class MessageServiceImpl : public MessageService {
public:std::string getMessage() override {std::cout << "Hello, World!" << std::endl;return "Hello, World!";}
};template <typename T>
class LoggingWrapper : public T {LogHeader header;public:LoggingWrapper(const LogHeader& h) : header(h) {}template <typename... Args>LoggingWrapper(const LogHeader& h, Args&&... args) : T(std::forward<Args>(args)...), header(h) {}std::string getMessage() {before<LoggingWrapper<T>>("getMessage", header);std::string result = T::getMessage();after<LoggingWrapper<T>>("getMessage", header);return result;}
};int main() {LogHeader header = {"MyApp", "Logging"};LoggingWrapper<MessageServiceImpl> service(header);service.getMessage();return 0;
}
  • 说明:
    • 以上代码由claude ai生成,经测试正常运行
    • ~MessageService()是MessageService类的析构函数,用于在对象被销毁时执行必要的清理工作。
    • virtual关键字的作用是使该析构函数在继承层次中有多态行为。这意味着当我们通过基类指针/引用删除派生类对象时,将自动调用正确的派生类析构函数。
    • = default是C++11引入的语法,它告诉编译器为该函数生成一个默认的实现版本。
    • 该虚析构函数没有函数体,编译器将为它生成一个默认的空实现

相关文章:

  • ARM中断实验
  • Docker指令
  • Excel 使用VBA自动调整插入图片大小到单元格
  • 一文读懂SPI通讯协议
  • 2025汤家凤考研数学视频,基础网课百度网盘课程+PDF讲义资料
  • 从边缘设备丰富你的 Elasticsearch 文档
  • Go 限流器-漏桶 VS 令牌桶 常用包原理解析
  • 设计模式面试专题
  • 【深度学习】一文搞懂 如何计算图像数据集的RGB均值和方差(超详细的哦~)
  • MQ高级篇---消息可靠性
  • [自研开源] MyData 数据集成之任务调度模式 v0.7
  • FebHost:西班牙独立站是否需要注册.ES域名?
  • 解析服务器出现大量 TIME_WAIT 和 CLOSE_WAIT 状态的原因及排查方法
  • Qt程序可执行文件打包
  • Python学习目录
  • 【5+】跨webview多页面 触发事件(二)
  • 【mysql】环境安装、服务启动、密码设置
  • ➹使用webpack配置多页面应用(MPA)
  • Android系统模拟器绘制实现概述
  • AWS实战 - 利用IAM对S3做访问控制
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Laravel核心解读--Facades
  • Markdown 语法简单说明
  • Node项目之评分系统(二)- 数据库设计
  • Redis 中的布隆过滤器
  • vue脚手架vue-cli
  • zookeeper系列(七)实战分布式命名服务
  • 编写符合Python风格的对象
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • AI算硅基生命吗,为什么?
  • Spring Batch JSON 支持
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #WEB前端(HTML属性)
  • $().each和$.each的区别
  • (04)odoo视图操作
  • (定时器/计数器)中断系统(详解与使用)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (汇总)os模块以及shutil模块对文件的操作
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)模仿学习-Action数据的模仿
  • (一)插入排序
  • (转)3D模板阴影原理
  • (转)Unity3DUnity3D在android下调试
  • (转)大型网站的系统架构
  • .Net 知识杂记
  • .NET/C# 使用反射注册事件
  • .NET与 java通用的3DES加密解密方法
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /etc/motd and /etc/issue
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解