template c++ español
C++: error de clase de plantilla anidada "especialización explícita en ámbito no de espacio de nombres" (1)
No está permitido especializar explícitamente A2
sin especializar A1
(§14.7.3 / 18). C ++ 0x tiene la misma restricción (n3242 §14.7.3 / 16). En el mismo momento, se permite una especialización parcial de una clase anidada. Entonces el truco con una clase ficticia es Ok.
El siguiente código:
template <class T1>
struct A1
{
template <int INDEX>
struct A2 { /* ... */ };
template <>
struct A2<-1> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
Da este error:
prog.cpp: 7: 13: error: especialización explícita en el ámbito de espacio de nombres
''struct A1<T1>''
prog.cpp: 8: 10: error: parámetros de plantilla no utilizados en especialización parcial:
prog.cpp: 8: 10: error:''T1''
¿Cómo puedo solucionar este error mejor? Intenté esto:
template <class T1>
struct A1
{
template <int INDEX, class DUMMY = void>
struct A2 { /* ... */ };
template <class DUMMY>
struct A2<-1, DUMMY> { /* ... */ };
};
int main()
{
A1<int>::A2<-1> x;
}
Lo cual parece funcionar, pero también parece un poco fudge.
¿Hay una mejor manera de solucionar esto?
Revisé las respuestas anteriores y solo pude encontrar las que tienen funciones en las clases, no las clases en las clases. También encontré el truco "DUMMY" en otras respuestas, pero me preguntaba si existe una solución más agradable.
Además, como nota al margen, ¿es el primer código permitido por C ++ 0x?