typedef un puntero compartido que contiene una clase con plantilla
Frecuentes
Visto 2,612 veces
2
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
2 Respuestas
7
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
2
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 c++ class templates shared-ptr forward-declaration or haz tu propia pregunta.
Posiblemente relacionado: forma menos detallada de declarar std multidimensional :: array - ildjarn