typedef un puntero compartido que contiene una clase con plantilla

Supongamos que tengo una clase de plantilla declarada hacia adelante y quiero tipear un puntero compartido. ¿Cómo haría esto?

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

preguntado el 03 de mayo de 12 a las 22:05

2 Respuestas

Probablemente también desee la plantilla typedef. Lea sobre Sutter artículo.

En C ++ 03, necesita un truco como:

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

En C ++ 11, puede usar el alias de plantilla directamente con el using palabra clave:

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

contestado el 03 de mayo de 12 a las 22:05

Eso es porque Arg no es realmente un tipo. Arg<int> por ejemplo sería uno. Es por eso que el compilador no quiere compilar. Deberías haber escrito eso, por ejemplo:

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

Si usaste C++ 11, supongo que podrías haber escrito eso:

template<typename T> class Arg;

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

contestado el 03 de mayo de 12 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.