Typedef of a template?

R

Richard van Wegen

Dear All

I'm hoping someone can show me the correct way to typedef a template
class -
i.e. something along the lines of

typedef boost::shared_ptr<T> shared_ptr_multithread<T>;

(syntax is obviously wrong but you get the idea)

i.e. I want to be able to write

int main()
{
shared_ptr_multithread<MyClass> my_class_multithreaded_ptr;
shared_ptr<MyClass> my_class_singlethreaded_ptr;
}

so that for the time being it is equivalent to
int main()
{
shared_ptr<MyClass> my_class_multithreaded_ptr;
shared_ptr<MyClass> my_class_singlethreaded_ptr;
}

but later on I can change the way that shared_ptr_multithread<MyClass>
is
implemented without affecting all my other shared_ptr<MyClass>
declarations.

I'm sure it must be simple, but I can't find the syntax for it
anywhere and I've tried all the combinations of "template" and
"typename" etc I can think of with no success. (GCC 2.96). At the
moment I'm forced to rely on #define (eugh).

Thanks for any pointers!
Richard
 
J

John Harrison

Richard van Wegen said:
Dear All

I'm hoping someone can show me the correct way to typedef a template
class -
i.e. something along the lines of

typedef boost::shared_ptr<T> shared_ptr_multithread<T>;

(syntax is obviously wrong but you get the idea)

i.e. I want to be able to write

int main()
{
shared_ptr_multithread<MyClass> my_class_multithreaded_ptr;
shared_ptr<MyClass> my_class_singlethreaded_ptr;
}

so that for the time being it is equivalent to
int main()
{
shared_ptr<MyClass> my_class_multithreaded_ptr;
shared_ptr<MyClass> my_class_singlethreaded_ptr;
}

but later on I can change the way that shared_ptr_multithread<MyClass>
is
implemented without affecting all my other shared_ptr<MyClass>
declarations.

I'm sure it must be simple, but I can't find the syntax for it
anywhere and I've tried all the combinations of "template" and
"typename" etc I can think of with no success. (GCC 2.96). At the
moment I'm forced to rely on #define (eugh).

Thanks for any pointers!
Richard

You cannot write template typedefs, its a limitiation of the C++ syntax
(soon to be corrected?).

The best you can do is wrap your typedefs in a struct, which can be
templated.

template <class T>
struct Type
{
typedef boost::shared_ptr<T> shared_ptr_multithread;
typedef boost::shared_ptr<T> shared_ptr; // or something
};

int main()
{
Type::shared_ptr_multithread<MyClass> my_class_multithreaded_ptr;
Type::shared_ptr<MyClass> my_class_singlethreaded_ptr;
}

john
 
J

John Harrison

Sarah Thompson said:
That should be written as:

int main()
{
Type<MyClass>::shared_ptr_multithread my_class_multithreaded_ptr;
Type<MyClass>::shared_ptr my_class_singlethreaded_ptr;
}

shouldn't it?

Yes indeedy, thanks.

john
 
R

Richard van Wegen

You cannot write template typedefs, its a limitiation of the C++ syntax
Ah ok, that explains why I was having so much trouble.

Thanks very much to you both for the help!

Cheers
Richard
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,763
Messages
2,569,563
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top