简体   繁体   中英

C++ templated typedef

I have a templated class

template <T>
class Example 
{
...
};

inside which there are many methods of the following type:

template <class U> <class V> method(....)

Inside these I use tr1::shared_ptr to U or V or T.

Its tedious typing tr1::shared_ptr<const U> or tr1::shared_ptr<const V> .

The obvious thing to do:

template <typename U>
typedef tr1::shared_ptr<U> shptr<U>;

does not work.

What do you do in this situation? Anything that can reduce verbosity?

You can use an inner type:

template <typename U>
struct sptr {
    typedef tr1::shared_ptr<U> t;
};

Then say sptr<U>::t , or unfortunately often typename sptr<U>::t .

C++0x has template typedefs, you could check whether your compiler can be persuaded to accept them:

template<typename U>
using sptr = tr1::shared_ptr<U>;

Then say sptr<U>

And of course there's always #define sptr ::tr1::shared_ptr , for example if you're expecting C++0x in future and want to bridge the gap. Or if you're using it in a narrow enough context that a macro isn't scary.

Nothing to reduce verbosity (except what roe says).

But nice article on problem itself: Template Typedef .

You would really need this trick if you have some generic function that expects your type to have some associated typedef, and your type is templated (consider that you have provide result_t and it should be your template parameter!).

using tr1::shared_ptr;

should allow you to use shared_ptr without prefix, but that's all I know. Sorry.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM