C++测试代码

C++测试代码

基于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引入的语法,它告诉编译器为该函数生成一个默认的实现版本。
    • 该虚析构函数没有函数体,编译器将为它生成一个默认的空实现

相关推荐

  1. C++测试代码

    2024-03-25 07:24:03       41 阅读
  2. C语言】RC4 测试代码

    2024-03-25 07:24:03       45 阅读
  3. 代码测试自动化

    2024-03-25 07:24:03       46 阅读
  4. 读3dsr代码测试

    2024-03-25 07:24:03       33 阅读
  5. 代码审计中的安全测试方法

    2024-03-25 07:24:03       52 阅读
  6. golang代码规范和单元测试

    2024-03-25 07:24:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 07:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 07:24:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 07:24:03       82 阅读
  4. Python语言-面向对象

    2024-03-25 07:24:03       91 阅读

热门阅读

  1. Rancher(v2.6.3)——Rancher部署Redis(单机版)

    2024-03-25 07:24:03       40 阅读
  2. 中高级前端工程师招聘

    2024-03-25 07:24:03       44 阅读
  3. 报道:GPT-5将于今年年中发布

    2024-03-25 07:24:03       35 阅读
  4. Compose UI 之 Checkbox 复选框 & RadioButton 单选框

    2024-03-25 07:24:03       38 阅读
  5. redis优化token校验主动失效

    2024-03-25 07:24:03       41 阅读
  6. 因缘际会悟语

    2024-03-25 07:24:03       38 阅读