[aspectc-user] Another puma question.

Matthias Urban matthias.urban at pure-systems.com
Mon Nov 13 10:34:17 CET 2006

Hi Robert,

> Just a quick one this time.
> As I descend into the depths of templates, I can't seem to differentiate 
> between specialisations in the class database. i.e. if I have two classes, 
> fooclass<char * , double> and fooclass<String , unsigned>, they both turn up 
> in the class database as classes named fooclass and having almost all the 
> same attributes.
> Short of looking at their sourceinfo, how can I differentiate between these? 
> What methods should I be looking at to tell me what their specialisation 
> parameters are? I'm just working with some doxygen docs here.

You have to get the instantiation info for a template instance. With 
this info you have access to the template that was instantiated, to the 
template arguments given at the declaration of the instance, and to the 
deduced arguments used for the instantiation itself (different for 
template specializations). E.g.

   template<class T,int I>
   class X {...};

   // instantiation args: int, 1
   // deduced args      : int, 1
   X<int,1> x1;

   template<class T>
   class X<T,2> {...};

   // instantiation args: int
   // deduced args      : int, 2
   X<int> x2;

Here a little code example:

   // any semantic object (class or whatever)
   CObjectInfo* info = ...;
   // is a template instance?
   if (info->isTemplateInstance()) {
     // get instantiation infos
     CTemplateInstance* inst = info->TemplateInstance();
     // access 1st template instantiation argument
     // access 1st deduced template argument

Best regards,

Matthias Urban                          Phone: +49-391-544569-32
pure-systems GmbH                       Fax:   +49-391-544569-90

More information about the aspectc-user mailing list