¿hay alguna restricción/problema al utilizar una enum como argumento de plantilla (tipo) en C++?Usando enum como argumento de tipo de plantilla en C++
Ejemplo:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
Mi problema real utilizando MSVC++ a través de VS 2008 (SP1) en Win32/x86 son varios errores de compilación (= errores reportados por el compilador) en asociación con las clases de uso de enumeraciones como argumentos de la plantilla. Como desafortunadamente mi proyecto se ha vuelto un poco complejo (puede considerarlo como un error de diseño: P), las clases de plantilla que generan estos errores se derivan, anidan e incluso se especializan en una clase con parámetro de plantilla enum.
Al tratar de compilar, el compilador informa de muchos errores incorrectos/inútiles como "C2059: error de sintaxis: 'public'" en las líneas donde solo hay un comentario. Muchos de ellos podría solucionar reemplazando en métodos similares al del ejemplo const _t & param por _t (es decir, copiando el parámetro), pero tampoco podría corregir todos estos errores ni tengo una pista de por qué esto "ayuda ". ** Lo sé, el ejemplo simple anterior compila sin errores.
Usando int en lugar de enum, mi proyecto compila sin errores.
¡Gracias de antemano por cualquier pista o sugerencia!
Editar:
Después de todo, en serio considerar esto como un error del compilador. Cuando traté de reproducir los errores con código simplificado, los obtuve solo en el 50% de todas las "compilaciones", no muy deterministas:
P. ej. intentado compilar, e informó estos errores. Reconstruir - sin cambios. Se eliminó un comentario, compilación, sin cambios. Reconstruir - y luego: sin errores, compila bien.
Ya conocí algunos errores del compilador (2 o 3 supongo que dentro de 20k líneas de código), pero este me parece muy extraño.
¿Alguna sugerencia de cómo averiguar si es es el compilador?
"Al tratar de compilar, el compilador informa muchos errores incorrectos/inútiles" Esos errores "inútiles" a menudo tienen una descripción muy detallada de qué/y dónde salió mal. Simplemente lea la salida del compilador en lugar de "lista de errores". – SigTerm
Gracias por la pista, pero lo hice. Siempre lo hago ^^ Pero no me ayudó ... Errores: error C2059: error de sintaxis: error 'público' C2143: error de sintaxis: falta '>' antes ';' error C2143: error de sintaxis: falta ';' antes de '}' error fatal C1004: fin de archivo inesperado encontrado (y luego algunos otros errores, no relacionados con esta pregunta) todos estos solo aparecen cuando se usa la enumeración y desaparecen cuando se usa int – dyp
Esto se ve perfectamente bien para mí . Esto es un error del compilador o tu error, y si vas a adivinar, la apuesta del 99.9% es que eres tú. Pero no hay nada de malo en los fragmentos que has publicado. Publique una pequeña muestra completa dentro de sí misma y los errores exactos del compilador que crea. – Omnifarious