C++ (C+;+;)AspectC++;派生类的截取方法

C++ (C+;+;)AspectC++;派生类的截取方法,c++,intercept,aspect,C++,Intercept,Aspect,这可能是一个愚蠢的问题,但我在搜索了几个小时后找不到答案 使用AspectC++,我们可以定义切入点,这些切入点表示一旦匹配就会被截取的内容。比如说,我能做到 pointcut pc() = call("% Base::%(...)"); 因此,任何使用切入点的通知pc都将拦截对类基的某个方法的任何调用。即使以后创建了Base的子类Sub,pc也会拦截对Sub方法的调用,这种方法仍然有效。现在,我只想截取Sub的方法,即Sub的方法,它们在Base中不存在。我们如何才能使pc()截取最终创建的

这可能是一个愚蠢的问题,但我在搜索了几个小时后找不到答案

使用AspectC++,我们可以定义切入点,这些切入点表示一旦匹配就会被截取的内容。比如说,我能做到

pointcut pc() = call("% Base::%(...)");

因此,任何使用切入点的
通知
pc都将拦截对类
的某个方法的任何调用。即使以后创建了
Base
的子类
Sub
pc
也会拦截对
Sub
方法的调用,这种方法仍然有效。现在,我只想截取
Sub
的方法,即
Sub
的方法,它们在
Base
中不存在。我们如何才能使
pc()
截取最终创建的
Base
的任何子类的任何方法,而不是
Base
本身的方法?

为什么需要进行区分?公共基类方法通常被视为在功能上等同于派生类方法。换句话说,没有实际的区别。你能保护基类成员吗?因为我不想截获基类的方法,只想截获那些最终由开发人员添加到其子类中的方法。这是可能的吗?好的,但是如何避免(通过继承)公共基类方法在功能上与派生类方法相同的问题呢?如何区分它们呢?很好,所以我现在刚刚测试了,使用aspectc++,我可以简单地将切入点定义为
调用(“%Sub::%(…)”)
,它以某种方式区分继承方法和非继承方法。问题是:如何使它适用于任何子类?