esistono restrizioni/problemi che utilizzano un enum come argomento template (type) in C++?Utilizzare enum come argomento del tipo di modello in C++
Esempio:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
Il mio problema reale utilizzando MSVC++ tramite VS 2008 (SP1) in Win32/x86 sono diversi errori di compilazione (= errori segnalati dal compilatore) in associazione con le classi utilizzando le enumerazioni come argomenti del modello. Poiché purtroppo il mio progetto è diventato un po 'complesso (si può considerare che come errore di progettazione: P), le classi template che generano questi errori sono derivate, nidificate e persino specializzate su una classe con parametro del template enum.
Cercando di compilare, il compilatore riporta molti errori errati/inutili come "C2059: errore di sintassi: 'pubblico'" nelle righe dove c'è solo un commento. Molti di quelli che potevo risolvere sostituendo in metodi simili a quello nell'esempio il parametro const _t & di _t (cioè copiando il parametro), ma nessuno dei due era in grado di correggere tutti questi errori né ho un indizio sul perché questo "aiuta ". ** Lo so, il semplice esempio sopra compila senza errori.
Utilizzando int al posto di enum, il mio progetto viene compilato senza errori.
Grazie in anticipo per qualsiasi suggerimento o suggerimento!
Edit:
Dopo tutto, ho seriamente considerare questo come un bug del compilatore. Quando ho provato a riprodurre gli errori con codice semplificato, li ho ottenuti solo nel 50% di tutte le "build", non molto deterministiche:
Es. ha provato a compilare e ha segnalato questi errori. Ricostruisci - nessun cambiamento. Cancellato un commento, compilato - nessun cambiamento. Ricostruisci - e poi: nessun errore, compila bene.
Ho già incontrato alcuni bug del compilatore (2 o 3 credo entro 20k righe di codice), ma questo mi sembra molto strano.
Qualche suggerimento su come capire se lo è il del compilatore?
"Cercando di compilare, il compilatore riporta molti errori errati/inutili" Questi errori "inutili" spesso hanno una descrizione molto dettagliata di cosa/e dove è andato storto. Basta leggere l'output del compilatore invece di "error list". – SigTerm
Grazie per il suggerimento, ma l'ho fatto. Lo faccio sempre ^^ Ma non mi ha aiutato ... Errori: errore C2059: errore di sintassi: errore "pubblico" C2143: errore di sintassi: mancante '>' prima di ';' errore C2143: errore di sintassi: mancante ';' prima dell'errore fatale C1004 di "}": trovato inaspettatamente alla fine del file (e quindi alcuni altri errori, non correlati a questa domanda) tutti questi appaiono solo quando si utilizza l'enum e si annulla quando si utilizza int – dyp
Questo mi sembra perfettamente a posto . Questo è un errore del compilatore o un tuo errore, e se hai intenzione di indovinare, la scommessa del 99,9% è che sei tu. Ma non c'è niente di sbagliato con i frammenti che hai postato. Si prega di inviare un piccolo esempio completo in sé e gli errori esatti del compilatore che crea. – Omnifarious