typedef包含模板化类的共享指针

时间:2012-05-03 21:00:54

标签: c++ class templates shared-ptr forward-declaration

假设我已经声明了一些模板类前向,我想要键入一个指向它的共享指针。我该怎么做?

template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error

2 个答案:

答案 0 :(得分:6)

您可能还需要模板typedef。阅读Sutter的article

在C ++ 03中,你需要一个黑客:

template <typename Arg> struct ArgPtr {
     typedef std::shared_ptr<Arg> ArgPtrType;
};

在C ++ 11中,您可以使用using关键字直接使用模板别名:

template <typename T>
using ArgPtrType = std::shared_ptr<Arg<T>>;

答案 1 :(得分:2)

那是因为Arg不是真正的类型。例如Arg<int>就是一个。这就是编译器不想编译的原因。你应该写下这样的例子:

template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg<int>> ArgPtr;

如果您使用的是C ++ 11,我想您可以写下:

template<typename T> class Arg;

template<typename T>
using ArgPtr = std::tr1::shared_ptr<Arg<T>>;