Si tengo:¿Cómo llamo a los miembros estáticos de una clase de plantilla?
template <class T>
class A
{
static void f()
{
// not using template parameter T
}
};
En este caso A<int>::f()
es igual que A<double>::f()
, pero no quieren A::f()
llamar a través del parámetro de plantilla. ¿Existe una sintaxis que permita llamar al f()
pero no requiere el parámetro de la plantilla?
+1 para una solución ordenada. Aunque el compilador debería saber si utiliza el parámetro T, si no hay instancias del identificador T en el código, entonces ciertamente no se está utilizando. –
@Billy: Pero si la clase es parte de una biblioteca pública, entonces introducir el uso del parámetro 'T' provocaría un cambio ABI-breaking, ya que' A :: f() 'ya no sería válido. La introducción de contenido en funciones debe * nunca, nunca * romper ABI, solo cambios en la definición de la función. – cdhowie
@Billy ONeal: Sí, excepto cuando 'f()' llama a algunos 'A :: g()' que depende de 'T'. Sin embargo, dado que la regla general es que cualquier cosa relacionada con el uso de un identificador debe depender solo de su declaración, el lenguaje no equivale a 'f ()' con 'f()' aunque 'T' no se use en el cuerpo de 'f '. –
jpalecek