Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Meaning of template construction

Reply
Thread Tools

Meaning of template construction

 
 
=?ISO-8859-1?Q?Xavier_D=E9coret?=
Guest
Posts: n/a
 
      07-09-2004
I am trying to understand the meaning of this construction, found in the
CGAL library:

typedef typename Vb::template Rebind_TDS<TDS2>::Other Vb2;

Can anyone explain?


PS: I tried to reproduce this construction to see if it was what I
understood. Below is the code. Unfortunately, it crashes the compiler
(gcc version 3.3.3 20040412 (Red Hat Linux 3.3.3-7)).
 
Reply With Quote
 
 
 
 
Sharad Kala
Guest
Posts: n/a
 
      07-09-2004

"Xavier Décoret" <(E-Mail Removed)> wrote in message
news:cclmpu$ghp$(E-Mail Removed)...
> I am trying to understand the meaning of this construction, found in the
> CGAL library:
>
> typedef typename Vb::template Rebind_TDS<TDS2>::Other Vb2;


Let me give it a try.
- Vb is a class template.
- Vb has a nested class template Rebind_TDS
- Rebind_TDS contains a type Other.

So the above statement means that Vb2 is a type alias for the Other type in
Rebind_TDS, which is instantiated with TDS2 in the Vb class template.

-Sharad



 
Reply With Quote
 
 
 
 
John Harrison
Guest
Posts: n/a
 
      07-09-2004

"Xavier Décoret" <(E-Mail Removed)> wrote in message
news:cclmpu$ghp$(E-Mail Removed)...
> I am trying to understand the meaning of this construction, found in the
> CGAL library:
>
> typedef typename Vb::template Rebind_TDS<TDS2>::Other Vb2;
>
> Can anyone explain?
>


Take out your favourite C++ book and look at the chapter on allocators. The
std::allocator class uses a rebind/other mechanism exactly like the one you
are looking at.

The other point to make it that typename and template are just keywords to
help the compiler disambiguate the code. Try writing it like this

typedef Vb::Rebind_TDS<TDS2>::Other Vb2;

That is not legal C++, but it might make it easier to understand.

>
> PS: I tried to reproduce this construction to see if it was what I
> understood. Below is the code. Unfortunately, it crashes the compiler
> (gcc version 3.3.3 20040412 (Red Hat Linux 3.3.3-7)).


Where is the code?

john


 
Reply With Quote
 
=?ISO-8859-1?Q?Xavier_D=E9coret?=
Guest
Posts: n/a
 
      07-09-2004
John Harrison wrote:

> Where is the code?
>
> john
>
>

Thanks for the explanation. This is what I was suspected. Here is the
code (forgot it in my post).


class Object
{
class Drawer
{
public:
template <int dim>
class Projector
{
class Basis
{
float e[dim][3];
};
};
};
};


typedef typename Object::template Drawer<2>::Basis Vb2;

int
main()
{
}
 
Reply With Quote
 
John Harrison
Guest
Posts: n/a
 
      07-09-2004

"Xavier Décoret" <(E-Mail Removed)> wrote in message
news:ccltas$nng$(E-Mail Removed)...
> John Harrison wrote:
>
> > Where is the code?
> >
> > john
> >
> >

> Thanks for the explanation. This is what I was suspected. Here is the
> code (forgot it in my post).
>
>
> class Object
> {
> class Drawer
> {
> public:
> template <int dim>
> class Projector
> {
> class Basis
> {
> float e[dim][3];
> };
> };
> };
> };
>
>
> typedef typename Object::template Drawer<2>::Basis Vb2;
>
> int
> main()
> {
> }


There a few things wrong with that code.

1) It's Drawer that need to be the template
2) Not sure what Projector is doing
3) Drawer is private, should be public
4) You don't need to say typename because you aren't defining Vb2 inside a
template. The ambiguity that typename resolves only applies when compiling
templates.
5) I'm less sure of this but I think you can drop the template keyword as
well for similar reasons.

This compiles on gcc 3.3.1

class Object
{
public:
template <int dim>
class Drawer
{
public:
class Basis
{
float e[dim][3];
};
};
};


typedef Object:rawer<2>::Basis Vb2;

int main()
{
Vb2 x;
}


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to initialise member variable in template construction Angus C++ 8 09-01-2010 11:06 PM
Understanding search queries, semantics, and "Meaning" ...aren't weall looking for meaning? 5lvqbwl02@sneakemail.com Python 4 01-14-2009 02:28 PM
Default construction versus construction with initial values Ook C++ 10 10-08-2005 09:00 PM
Template construction in old gcc 3.3.3 does not compile in gcc 3.4.4 eknecronzontas@yahoo.com C++ 5 09-17-2005 12:27 AM
Re: A Newbie Question about template template template Chris Theis C++ 2 07-24-2003 09:42 AM



Advertisments