¿Es posible acceder a los valores de los parámetros de plantilla sin tipo en la clase de plantilla especializada?¿Es posible acceder a valores de parámetros de plantilla sin tipo en la clase de plantilla especializada?
Si tengo clase de plantilla con la especialización:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
sé que el caso anterior es fácil de codificar los valores 4 y 0 en lugar de utilizar variables, pero lo que tengo una clase más grande que estoy especializada y me gustaría poder acceder a los valores.
¿Es posible en A < 4,0> acceder a los valores major
y minor
(4 y 0)? O tengo que asignarlos a instancias de plantilla como constantes:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
Si se está especializando en valores, implica que hay algo especial sobre esos valores en particular. Si los está utilizando como valores generales en toda la plantilla y solo los trata como especiales en algunos lugares, puede ser que pueda abstraer el comportamiento especial en una plantilla de clase especializada más pequeña, dejando la plantilla grande como completamente genérica y no especializada. Es un poco difícil de decir, ¿puedes ampliar tu pregunta para que sea más "real"? –
Creo que la pregunta es bastante real. Tengo una clase base existente que implementa un comportamiento específico basado en la versión del protocolo. Anteriormente tenía un miembro que devolvía la versión de protocolo: como ese miembro ya no estaba disponible, había un método de registro que incluía la versión de protocolo en el resultado. Podría codificar los valores, pero quería saber si hay una mejor manera. La respuesta aceptada proporciona una buena manera de hacerlo (en realidad, estoy usando rasgos de manera similar en otros lugares) para obtener los tipos de parámetros, pero la intención es la misma. – stefanB