我有一个模板类
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>;
不起作用。
在这种情况下你做了什么?什么能减少冗长的东西?
答案 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
,但这就是我所知道的。遗憾。