AspectC++ join point,pointcut,advice,aspect,slices, introduction

AspectC++ 是一种面向切面编程的C++扩展,核心是将横切关注点模块化。本文介绍了join point(如execution、call、construction和destruction)、pointcut(join point的集合)、advice(插入pointcut的代码)以及aspect和slices的概念。advice分为before、after和around类型,而introduction允许向类或aspects引入新的属性和方法,且能访问私有成员。
摘要由CSDN通过智能技术生成

AOP的核心思想是对横切关注点进行模块化。Aspect C++是针对C++的AOP扩展。

  • join point:运行aspects的代码部分,可以使类、结构、联合、对象、控制流

    execution join point与可执行函数名关联。纯虚函数不可执行,因此可执行join point的advice代码不能应用于纯虚函数。但纯虚函数的调用,即这类函数作为call join point,是可以的。
    call join point与两个名字相关:源(调用者)名字和调用的目标函数(被调用者)的名字。由于同一个函数中会有很多函数调用,每个函数名可以被关联到一系列的call join point。
    construction join point为当创建实例时。destruction join point对应于析构实例。

  • pointcut:是join point的集合。用来定义在什么地方插入advice代码,进行横向切入。类似于C++中的变量,只不过带个括号。定义格式: pointcut 变量名() = 标志符( ||标志符…… )

    匹配表达式(name pointcut)
    "int C::%(...)"
           匹配所有类C中返回值为int的成员函数;
    "%List"
           匹配任意以“List”为结尾的类、结构、联合或枚举;
    "% printf(const char *, ...)"
           匹配全局域中名字为print、拥有至少一个const char *型形参、返回任意类型的函数;
    "const %& ...::%(...)"
           匹配所有返回值为const reference的函数;
    
    pointcut表达式
    "%List" && !derived("Queue")
           描述以List结尾、不派生自基类Queue的所有类;
    call("void draw()"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值