2012-05-03 53 views
2

假設我已經聲明瞭一些模板類,並且想要typedef指向它的共享指針。我將如何做到這一點?typedef一個包含模板類的共享指針

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

可能有關:不太詳細的方式來聲明多維std :: array](http://stackoverflow.com/q/7689288/636019) – ildjarn

回答

6

你也可能需要模板的typedef。閱讀Sutter的article

在C++ 03,你需要一劈爲:

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

在C++ 11,你可以用模板直接與using keyword別名:

template <typename T> 
using ArgPtrType = std::shared_ptr<Arg<T>>; 
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>>;