I tienen una siguiente plantilla struct
:¿Cómo valido los parámetros de la plantilla en tiempo de compilación cuando una clase con plantilla no contiene funciones de miembros utilizables?
template<int Degree>
struct CPowerOfTen {
enum { Value = 10 * CPowerOfTen<Degree - 1>::Value };
};
template<>
struct CPowerOfTen<0> {
enum { Value = 1 };
};
que se va a utilizar como esto:
const int NumberOfDecimalDigits = 5;
const int MaxRepresentableValue = CPowerOfTen<NumberOfDecimalDigits>::Value - 1;
// now can use both constants safely - they're surely in sync
ahora que la plantilla requiere Degree
ser no negativo. Me gustaría aplicar una afirmación en tiempo de compilación para eso.
Cómo lo hago? He intentado añadir un destructor a CPowerOfTen
:
~CPowerOfTen() {
compileTimeAssert(Degree >= 0);
}
pero ya que no se llama directamente Visual C++ 9 decide no crear una instancia de ella y por lo que la sentencia assert en tiempo de compilación no se evalúa en absoluto.
¿Cómo podría cumplir una comprobación en tiempo de compilación para Degree
ser no negativo?
No se detuvo la recursividad en tiempo de compilación es un gran problema, sin embargo? – visitor