Connecting Tech Pros Worldwide Forums | Help | Site Map

template instantiation syntax

Faheem Mitha
Guest
 
Posts: n/a
#1: Oct 30 '05
Hi,

On the net, I found the following article,
http://www.gamedev.net/reference/art...rticle2097.asp

describing a generic factory class.

My question is about one of the links pointed to by the article,
namely

http://downloads.gamedev.net/feature...ory/listing4.h

The code in listing4.h includes syntax like

************************************************** **************************
template<typename BaseClassType, typename Param1Type, typename UniqueIdType>
class ObjectFactory<BaseClassType (Param1Type), UniqueIdType>
{
protected:
typedef BaseClassType (*CreateObjectFunc)(Param1Type);
[...]
************************************************** **************************

From the article, it looks like he is using the structure of templates
parameters after the class name to instantiate the template, eg.

ObjectFactory<Shape *(int), std::string> shape_factory;

Here Shape * == BaseClassType
int == Param1Type
std::string == UniqueIdType

I've never seen syntax like this, so I'm wondering what is going
on. Does anyone have an idea? Is this even legal C++ syntax?

Thanks in advance. Faheem.
Faheem Mitha
Guest
 
Posts: n/a
#2: Oct 30 '05

re: template instantiation syntax


On Sun, 30 Oct 2005 17:53:54 GMT, Faheem Mitha <faheem@email.unc.edu> wrote:[color=blue]
> Hi,
>
> On the net, I found the following article,
> http://www.gamedev.net/reference/art...rticle2097.asp
>
> describing a generic factory class.
>
> My question is about one of the links pointed to by the article,
> namely
>
> http://downloads.gamedev.net/feature...ory/listing4.h
>
> The code in listing4.h includes syntax like
>
> ************************************************** **************************
> template<typename BaseClassType, typename Param1Type, typename UniqueIdType>
> class ObjectFactory<BaseClassType (Param1Type), UniqueIdType>
> {
> protected:
> typedef BaseClassType (*CreateObjectFunc)(Param1Type);
> [...]
> ************************************************** **************************
>
> From the article, it looks like he is using the structure of templates
> parameters after the class name to instantiate the template, eg.
>
> ObjectFactory<Shape *(int), std::string> shape_factory;
>
> Here Shape * == BaseClassType
> int == Param1Type
> std::string == UniqueIdType[/color]

I missed the

template <typename CtorSignature, typename UniqueIdType> class ObjectFactory;

at the top. So this is a class-template partial specialization of
ObjectFactory, though not of a kind I have seen before.

Have I understood this correctly?

Thanks. Faheem.
Closed Thread