[aspectc-user] Singleton pattern
    Luigi 'Comio' Mantellini 
    luigi.mantellini at gmail.com
       
    Wed Jan 10 02:04:43 CET 2007
    
    
  
Dear All,
my name is Luigi and I'm new in AspectC programming.
I need to create a Singleton Pattern (just an exercise to learn
more)... but I don't
understand some aspectc's mechanism.
The idea is to create a "wrapper" aspect that adds to a matched class a
static pointer to the single instance and a public method that returns
this pointer.
My first problem is how I can obtain the Type of the Class addressed by
the static jointpoint (I tried with "That" type without success).
The second problem is how assign a start value to a static value
introduced by the advice (in my example _instance and _count).
I produced this code:
[code]
aspect AAbstractSingleton {
public:
       pointcut virtual singletonize() = 0;
       advice singletonize():
               public: static That *Instance() {
                       if (!_instance) {
                             _instance = new That; /** First problem:
how obtain the
type of the class addressed by joinpoint */
                       }
                       return _instance;
               }
       advice singletonize():
               protected: static That* _instance; /** First problem:
how obtain the
type of the class addressed by joinpoint */
       advice singletonize():
               private: static int _count; /** Second problem: how
initialize an
introduced static
member */
protected:
       advice construction(singletonize()): before() {
               // Evito l'accesso diretto al costruttore
               if (tjp->that()->_count) {
                       // Costruttore bloccato
                       printf("Impossibile accedere al costruttore\n");
                       exit(1);
               }
               tjp->that()->_count++;
       }
};
aspect AConcrteteSingleton: public AAbstractSingleton {
public:
       pointcut virtual singletonize() = "SampleClass";
};
[/code]
Thanks in advance.
Best Regards,
Luigi Mantellini
-- 
Luigi 'Comio' Mantellini
The three laws of users:
1. A user may not injure a sysadmin, or through inaction,
   allow a sysadmin to come to harm.
2. A user must obey the orders given it by sysadmins except
   where such orders would conflict with the First Law.
3. A user must protect its own existence as long as such
   protection does not conflict with the First or Second Law.
    
    
More information about the aspectc-user
mailing list