Why do you think this program is for aspectc?<br>I googled for the string "pointcut factBase(int x)", and found your example in the article about aspectj (AOP for Java).<br>I think checking argument value is impossible in aspectc. At least official documentation doesn't describe such a feature.
<br>The easiest way to implement factorial in aspectc is checking for argument value inside the "around" advice.<br>Below is the source code I wrote when trying to implement your example in aspectc.<br><br><span style="font-weight: bold;">
I don't know why, but this code doesn't compile if I use "call" instead "execution".</span><br style="font-weight: bold;"><span style="font-weight: bold;">The problem seems to be with the recursive call. Will anybody show the way of using "call" in this program?
</span><br style="font-weight: bold;"><br style="font-weight: bold;"><span style="font-weight: bold;">Another problem I discovered is probably a bug in ac++. When I replace recursive call</span><br style="font-weight: bold;">
<br style="font-weight: bold;"><span style="font-weight: bold;">   *tjp->result()=x*( FactClass::fact(x-1) );</span><br style="font-weight: bold;"><br style="font-weight: bold;"><span style="font-weight: bold;">with</span>
<br style="font-weight: bold;"><br style="font-weight: bold;"><span style="font-weight: bold;"><span style="font-weight: bold;">   </span>*tjp->result()=x*( *tjp->target()->fact(x-1) );<br><br style="font-weight: bold;">
</span><span style="font-weight: bold;">the program runs fine. When I write "call" instead "execution", recursion stops working.</span><br style="font-weight: bold;"><span style="font-weight: bold;">The parser doesn't recognize "*tjp->target()->fact(x-1)" as a call to FactClass::fact method, and this call is
</span><br style="font-weight: bold;"><span style="font-weight: bold;">not advised.</span><br><br>According to your email address you are from Lutsk. So greetings from Vinnytsia :)<br><br>======= file aspect.ah ==========
<br>#ifndef _FACT_EXAMPLE_<br>#define _FACT_EXAMPLE_<br><br>#include "FactClass.h"<br>#include <iostream><br><br>aspect FactExample<br>{<br>    advice "FactClass" : slice class <br>    {<br>    public:
<br>        static int fact(int x)<br>        {<br>            return 1;<br>        }<br>    };<br><br>    pointcut Fact(int x) = execution("int ...::FactClass::%(int)") && args(x);<br><br>    advice Fact(x) :around(int x)
<br>    {<br>        if(x==1)<br>            *tjp->result()=1;<br>        else<br>            tjp->proceed();<br>    }<br><br>    advice Fact(x) :around(int x)<br>    {<br>        if(x>1){<br>            *tjp->result()=x*( FactClass::fact(x-1) );
<br>        }else<br>            tjp->proceed();<br>    }<br>};<br><br>#endif<br>======= end of aspect.ah =========<br><br><br>======= file FactClass.h =========<br>#ifndef _FACT_<br>#define _FACT_<br>class FactClass{};
<br>#endif<br>======= end of FactClass.h =========<br><br><br>======= file main.cc =========<br>#include <iostream><br>#include "FactClass.h"<br>using namespace std;<br>int main()<br>{<br>   for(int i=1;i<10;i++)
<br>                  cout << FactClass::fact(i) << endl;<br>     return 0;<br>}<br>======= end of FactClass.h =========<br><br>> Dear Sir! <br>> I found a very interesting program (see attachment) with recursion call
<br>> (factorial computation). But, unfortunately, I do not know how to correct<br>> conditions in advices <br>> (e.g. advice () ... args(x) && (x==1)). The latter is an error (x==1) how to<br>> modify the code? 
<br>> Another question is about call such constructed class members. I mean how to<br>> call, for example, Fact::fact(4), <br>> where fact member function is intriduced as aspect? <br><br><br>-- <br>WBR, Pavlo Korzhyk
<br>ICQ#155870780<br>