[aspectc-user] reset tjp->that()?
Daniel Lohmann
daniel.lohmann at informatik.uni-erlangen.de
Mon Dec 11 09:23:28 CET 2006
Michael Gong schrieb:
> Hi, Daniel & Yan,
>
> It brings an interesting question.
>
> The template works fine for this case.
>
>> I am afraid what you are trying to achieve is not possible.
>> // Template, works for any class that offers a Release() method
>> template< class T > void Release( T*& _this ) {
>> _this->Release(); // destroy
>> _this = 0; // invalidate
>> }
>>
>
> But how about I want to do the "invalidation" for method "Release2" ,
> "Release3", or etc ? Using template, you might have :
>
> template< class T > void Release2( T*& _this ) {
> _this->Release2(); // destroy
> _this = 0; // invalidate
> }
>
> template< class T > void Release3( T*& _this ) {
> _this->Release3(); // destroy
> _this = 0; // invalidate
> }
>
> ...
>
> It is typical crosscutting concern, I think.
You mean the pointer invalidation? I guess one could say so.
> Since AOP is targeted to modularize crosscutting concern, can it be used
> for this case ? More specifically, can AspectC++ capture it ?
The AspectC++ *language* is able to express this:
aspect Invalidator {
advice execution("void Release%<...>(%)") : after() {
*tjp->arg<0>() = 0;
}
};
The ac++ *weaver*, however, is currently not able to weave this, as
support for weaving in template code is yet to come.
Daniel
More information about the aspectc-user
mailing list