C ++模板化typedef

时间:2010-02-10 17:23:46

标签: c++ templates typedef

我有一个模板类

template <T>
class Example 
{
...
};
里面有哪里 有以下几种方法:

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

在这些内部我使用tr1 :: shared_ptr到U或V或T.

繁琐的打字tr1::shared_ptr<const U>tr1::shared_ptr<const V>

显而易见的事情:

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

不起作用。

在这种情况下你做了什么?什么能减少冗长的东西?

3 个答案:

答案 0 :(得分:9)

您可以使用内部类型:

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

然后说sptr<U>::t,或者不幸的是typename sptr<U>::t

C ++ 0x有模板typedef,您可以检查是否可以说服您的编译器接受它们:

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

然后说sptr<U>

当然,总有#define sptr ::tr1::shared_ptr,例如,如果您将来期待C ++ 0x并希望缩小差距。或者,如果你在一个足够狭窄的环境中使用它,宏就不会吓人。

答案 1 :(得分:2)

没有什么可以减少冗长(除了罗伊所说的)。

但关于问题本身的好文章:Template Typedef

如果您有一些期望您的类型具有一些关联的typedef的通用函数,并且您的类型是模板化的(考虑到您已经提供),那么您真的需要这个技巧result_t,它应该是你的模板参数!)。

答案 2 :(得分:1)

using tr1::shared_ptr;

应该允许你使用没有前缀的shared_ptr,但这就是我所知道的。遗憾。