我想为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是合适的。但是,我不知道如何实现这一点。有人能告诉我如何输入这个吗?
答案 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>>;