Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Declaring Template Classes that take Multiple Nested Templates as Parameters

Reply
Thread Tools

Declaring Template Classes that take Multiple Nested Templates as Parameters

 
 
pagekb@gmail.com
Guest
Posts: n/a
 
      06-09-2006
Hello,

I'm having some difficulty compiling template classes as containers for
other template objects. Specifically, I have a hierarchy of template
classes that contain each other. Template class B has an instance of
template class A, which has some base type T (usually int or double).
However, the base type T is important to calculations in B, so I would
like to obtain access to the type for further variable declaration
within B. Below is a simplified version of my best attempt at the
syntax. I'm compiling under XCode 2.0 on Mac OS X version 10.4.6 using
GCC 4. Error messages have been commented in after lines in which they
occur:


//=========================================
#include <iostream>
#include <vector>

template <typename T> class A
{
typedef T base_type;

public:
base_type get_item(int index)
{
return data_(index);
}

private:
std::vector<base_type> data_;
};

template <template <typename T> class A> class B
{
typedef T base_type; // error: 'T' does not name a type
typedef A<base_type> Atype; // error: 'base_type' was not declared
in this scope

public:
base_type get_item(int index)
{
return data_.get_item(index);
}

private:
Atype data_;

};
//=========================================


Is there any way to gain access to these nested template parameters
from within class B? Is there a better way to get this same
functionality without intimate knowledge of A's types? Am I just
making some syntax error in the template class declaration?

Thanks for the help!

 
Reply With Quote
 
 
 
 
amparikh@gmail.com
Guest
Posts: n/a
 
      06-09-2006

(E-Mail Removed) wrote:
> Hello,
>
> I'm having some difficulty compiling template classes as containers for
> other template objects. Specifically, I have a hierarchy of template
> classes that contain each other. Template class B has an instance of
> template class A, which has some base type T (usually int or double).
> However, the base type T is important to calculations in B, so I would
> like to obtain access to the type for further variable declaration
> within B. Below is a simplified version of my best attempt at the
> syntax. I'm compiling under XCode 2.0 on Mac OS X version 10.4.6 using
> GCC 4. Error messages have been commented in after lines in which they
> occur:
>
>
> //=========================================
> #include <iostream>
> #include <vector>
>
> template <typename T> class A
> {
> typedef T base_type;
>
> public:
> base_type get_item(int index)
> {
> return data_(index);
> }
>
> private:
> std::vector<base_type> data_;
> };
>
> template <template <typename T> class A> class B
> {
> typedef T base_type; // error: 'T' does not name a type
> typedef A<base_type> Atype; // error: 'base_type' was not declared
> in this scope
>
> public:
> base_type get_item(int index)
> {
> return data_.get_item(index);
> }
>
> private:
> Atype data_;
>
> };
> //=========================================
>
>
> Is there any way to gain access to these nested template parameters
> from within class B? Is there a better way to get this same
> functionality without intimate knowledge of A's types? Am I just
> making some syntax error in the template class declaration?
>
> Thanks for the help!


The template parameter T that you have defined in the template class B
is really a template parameter for the template template parameter A.

It isnt visible outside. In many ways it is just a holder when
declaring a template template parameter and infact if you dont refer to
it again, you dont even need to have a name for that.

anyway try this.


template <typename T> class A
{
typedef T base_type;

public:
base_type get_item(int index)
{
return data_(index);
}

private:
std::vector<base_type> data_;

};

template < typename T, template <typename> class A> class B
{
typedef T base_type; // error: 'T' does not name a type

typedef A<base_type> Atype; // error: 'base_type' was not
declared in this scope

public:
base_type get_item(int index)
{
return data_.get_item(index);
}
private:
Atype data_;
};

 
Reply With Quote
 
 
 
 
mlimber
Guest
Posts: n/a
 
      06-09-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> (E-Mail Removed) wrote:
> > Hello,
> >
> > I'm having some difficulty compiling template classes as containers for
> > other template objects. Specifically, I have a hierarchy of template
> > classes that contain each other. Template class B has an instance of
> > template class A, which has some base type T (usually int or double).
> > However, the base type T is important to calculations in B, so I would
> > like to obtain access to the type for further variable declaration
> > within B. Below is a simplified version of my best attempt at the
> > syntax. I'm compiling under XCode 2.0 on Mac OS X version 10.4.6 using
> > GCC 4. Error messages have been commented in after lines in which they
> > occur:
> >
> >
> > //=========================================
> > #include <iostream>
> > #include <vector>
> >
> > template <typename T> class A
> > {
> > typedef T base_type;
> >
> > public:
> > base_type get_item(int index)
> > {
> > return data_(index);
> > }
> >
> > private:
> > std::vector<base_type> data_;
> > };
> >
> > template <template <typename T> class A> class B
> > {
> > typedef T base_type; // error: 'T' does not name a type
> > typedef A<base_type> Atype; // error: 'base_type' was not declared
> > in this scope
> >
> > public:
> > base_type get_item(int index)
> > {
> > return data_.get_item(index);
> > }
> >
> > private:
> > Atype data_;
> >
> > };
> > //=========================================
> >
> >
> > Is there any way to gain access to these nested template parameters
> > from within class B? Is there a better way to get this same
> > functionality without intimate knowledge of A's types? Am I just
> > making some syntax error in the template class declaration?
> >
> > Thanks for the help!

>
> The template parameter T that you have defined in the template class B
> is really a template parameter for the template template parameter A.
>
> It isnt visible outside. In many ways it is just a holder when
> declaring a template template parameter and infact if you dont refer to
> it again, you dont even need to have a name for that.
>
> anyway try this.
>
>
> template <typename T> class A
> {
> typedef T base_type;
>
> public:
> base_type get_item(int index)
> {
> return data_(index);
> }
>
> private:
> std::vector<base_type> data_;
>
> };
>
> template < typename T, template <typename> class A> class B
> {
> typedef T base_type; // error: 'T' does not name a type
>
> typedef A<base_type> Atype; // error: 'base_type' was not
> declared in this scope
>
> public:
> base_type get_item(int index)
> {
> return data_.get_item(index);
> }
> private:
> Atype data_;
> };


Or...

template <typename T> class A
{
public:
typedef T base_type; // now public

base_type get_item(int index)
{
return data_(index);
}
private:
std::vector<base_type> data_;
};

template <class A> class B
{
typedef typename A::base_type base_type;

public:
base_type get_item(int index)
{
return data_.get_item(index);
}
private:
A data_;
};

Cheers! --M

 
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
problem in running a basic code in python 3.3.0 that includes HTML file Satabdi Mukherjee Python 1 04-04-2013 07:48 PM
returning pointer to template objects in nested template classes Javier Montoya C++ 4 11-20-2010 11:19 PM
skipping template parameters inside template parameters kito C++ 2 09-26-2010 12:04 AM
Declaring a template class with two template params a friend in anon-template class A L C++ 1 08-25-2010 07:25 AM
Templates templates templates JKop C++ 3 07-21-2004 11:44 AM



Advertisments