假設我已經聲明瞭一些模板類,並且想要typedef指向它的共享指針。我將如何做到這一點?typedef一個包含模板類的共享指針
template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error
假設我已經聲明瞭一些模板類,並且想要typedef指向它的共享指針。我將如何做到這一點?typedef一個包含模板類的共享指針
template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error
你也可能需要模板的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>>;
這是因爲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>>;
可能有關:不太詳細的方式來聲明多維std :: array](http://stackoverflow.com/q/7689288/636019) – ildjarn