Stai confondendo l'idea di parametri tipi e parametrizzato valori. Un parametro modello può essere un tipo o una costante. Per esempio:
template <typename T>
struct Foo;
contro ..
template <int N>
struct Foo;
Sembra che si desidera specializzarsi vostro modello basato su un enum costante, piuttosto che un tipo. Significato, è necessario dire:
enum CompCriteria{ByKey,ByValue,ByeKeyAndValue};
template<CompCriteria>
struct X;
// Specialization for ByKeyAndValue
//
template<>
struct X<ByeKeyAndValue>
{
};
int main()
{
X<ByeKeyAndValue> x; // instantiate specialization
return 0;
}
Inoltre, non è possibile fare riferimento al enumerazioni usando l'operatore namespace
. Se vuoi incapsulare le tue enumerazioni, devi raggrupparle in uno spazio dei nomi:
namespace CompCriteria
{
enum type {ByKey,ByValue,ByeKeyAndValue};
}
fonte
2010-11-21 16:07:19
grazie, funziona; –