C++11面向切面编程(AOP)入门指南

文章介绍了面向切面编程(AOP)的概念,强调了切面在程序设计中的重要性,以及如何通过AOP将非核心逻辑关注点如日志、事务管理等从核心业务中分离。文中提供了一个C++11实现的AOP框架示例,展示了如何利用SFINAE技术处理包含Before和After方法的切面,以及只包含其中之一的场景,以实现更灵活的代码结构和功能插拔。

何为AOP

面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,允许开发者在不修改原有代码的情况下,为程序添加额外的功能。

什么是面向切面编程?

AOP的核心概念是切面(Aspect),它表示在程序中跨越多个功能模块的关注点。例如,日志记录、事务管理和权限控制等功能都可以视为切面。通过将这些关注点从业务逻辑中分离出来,实现对程序行为的模块化,从而提高代码的可读性和可维护性。
关键词:关注点分离,核心逻辑和非核心逻辑分离,核心关注点和切面关注点

核心概念

切面就是分布在各个业务模块里的非核心模块,大部分业务流程里都存在,因此aop就是为了把这些非核心逻辑关注点分离出来,比如日志模块。

在我们执行核心业务逻辑前后可以执行切面逻辑。

整个框架核心概念包括切面,切入点,通知,具体位置见下节。

  • 切入点就是目标函数,核心逻辑
  • 通知包括前置通知,后置通知,环绕通知(同时存在前置通知和后置通知)

图形化展示切面

在这里插入图片描述

AOP框架代码实现-C++11

参考《深入应用C++11代码优化与工程级别应用》

#include<type_traits>
#include<iostream>

#define HAS_MEMBER(member)\
template <typename T, typename... Args>\
struct has_member_##member\
{\
private:\
    template <typename U>\
    static auto Check(int) -> decltype(std::declval<U>().member(std::declval<Args>()...), std::true_type());\
    template <typename U>\
    static std::false_type Check(...);\
public:\
    enum {value = std::is_same<decltype(Check<T>(0)), std::true_type>::value};\
};\

HAS_MEMBER(Before)
HAS_MEMBER(After)

#if 1
template <typename Func, typename... Args>
struct Aspect
{
    Aspect(Func&& f) : m_func(std::forward<Func>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值