lista - estructura de c++
Estructura con variables de plantilla en C++ (7)
Estoy jugando con plantillas. No estoy tratando de reinventar el std :: vector, estoy tratando de obtener una comprensión de la plantilla en C ++.
¿Puedo hacer lo siguiente?
template <typename T>
typedef struct{
size_t x;
T *ary;
}array;
Lo que intento hacer es una versión básica de plantillas de:
typedef struct{
size_t x;
int *ary;
}iArray;
Parece que funciona si utilizo una clase en lugar de struct, ¿no es posible con las estructuras typedef?
De las otras respuestas, el problema es que estás creando un typedef. La única "manera" de hacer esto es usar una clase con plantilla; es decir, metaprogramación de plantillas básicas.
template<class T> class vector_Typedefs {
/*typedef*/ struct array { //The typedef isn''t necessary
size_t x;
T *ary;
};
//Any other templated typedefs you need. Think of the templated class like something
// between a function and namespace.
}
//An advantage is:
template<> class vector_Typedefs<bool>
{
struct array {
//Special behavior for the binary array
}
}
El estándar dice (en 14/3. Para la gente no estándar, los nombres que siguen a un cuerpo de definición de clase (o el tipo en una declaración en general) son "declaradores")
En una declaración de plantilla, especialización explícita o instanciación explícita, la lista de iniciador-declarador en la declaración contendrá como máximo un declarante. Cuando tal declaración se usa para declarar una plantilla de clase, no se permite declarante.
Hazlo como muestra Andrey.
El problema es que no se puede moldear un typedef, tampoco es necesario escribir estructuras dede en C ++.
Lo siguiente hará lo que necesites
template <typename T>
struct array {
size_t x;
T *ary;
};
La sintaxis es incorrecta. El typedef
debe ser eliminado.
No necesita hacer un typedef
explícito para clases y estructuras. ¿Para qué necesitas el typedef
? Además, el typedef
después de una template<...>
es sintácticamente incorrecto. Simplemente use:
template <class T>
struct array {
size_t x;
T *ary;
} ;
Puede plantilla una estructura y una clase. Sin embargo, no se puede crear una plantilla de tipodef. Así que la template<typename T> struct array {...};
funciona, pero la template<typename T> typedef struct {...} array;
no. Tenga en cuenta que no es necesario el truco typedef en C ++ (puede usar structs sin el modificador de struct
muy bien en C ++).
template <typename T>
struct array {
size_t x;
T *ary;
};