Type_f的unique_ptr列表

时间:2014-08-13 08:57:35

标签: c++ list unique-ptr

我想为std::list<std::unique_ptr<>>制作一个typedef,因此我可以输入PtrList<A>,然后将其替换为std::list<std::unique_ptr<A>>

我知道用#define做到这一点的方法:

#define PtrList(x) std::list<std::unique_ptr<x>>

但我认为typedef是合适的。但是,我不知道如何实现这一点。有人能告诉我如何输入这个吗?

4 个答案:

答案 0 :(得分:9)

首先,尽量不要使用#define来生成代码。除条件编译外,应避免使用#define

正确的类型别名:

template<class T> using PtrList = std::list<std::unique_ptr<T>>;

使用示例:

PtrList<int> intPtrList; 

答案 1 :(得分:5)

怎么样

template<typename A>
using PtrList = std::list<std::unique_ptr<A>>;

PtrList<SomeStructure> myList;

答案 2 :(得分:3)

在C ++ 11中:使用模板别名

template <class T>
using PtrList = std::list<std::unique_ptr<T>>;

//later:
PtrList<int> myIntPtrList;
C ++ 98/03中的

没有模板别名,所以在这种情况下你需要一个解决方法。也没有std::unique_ptr,所以你显然已经有了C ++ 11,但为了完整起见,这里是一个带有shared_ptr的C ++ 03示例(我拒绝使用auto_ptr },无论是&#34;更像是unique_ptr&#34;):

template <class T>
struct PtrList { typedef std::list<boost::shared_ptr<T>> type; };

//later:
PtrList<int>::type myIntPtrList;

答案 3 :(得分:2)

在当前版本的C ++(C ++ 11)中,您可以使用类型别名

template<class T> using PtrList = std::list<std::unique_ptr<T>>;