By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,247 Members | 1,250 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,247 IT Pros & Developers. It's quick & easy.

Typedef of a template?

P: n/a
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
Jul 19 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a

"Richard van Wegen" <sp***********@volcanomail.com> wrote in message
news:c7**************************@posting.google.c om...
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
Jul 19 '05 #2

P: n/a

"Sarah Thompson" <sa***@telergy.remove.this.bit.com> wrote in message
news:be*******************@news.demon.co.uk...


John Harrison wrote:
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;
}


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
Jul 19 '05 #3

P: n/a
> > > 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<MyClass>::shared_ptr_multithread my_class_multithreaded_ptr;
Type<MyClass>::shared_ptr my_class_singlethreaded_ptr;
}


Ah ok, that explains why I was having so much trouble.

Thanks very much to you both for the help!

Cheers
Richard
Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.