tengo 4 constantes int:¿Cómo comprobar estáticamente que dos razones son iguales?
const int a1 = 1024;
const int a2 = 768;
const int b1 = 640;
const int b2 = 480;
y yo quiero comprobar estáticamente que tienen la misma relación. Para comprobar estáticamente, estoy usando BOOST_STATIC_ASSERT
, pero no admite expresiones.
yo probamos este:
BOOST_STATIC_ASSERT(1e-5 > std::abs((double)a1/(double)a2 - (double)b1/(double)b2));
pero esto produce errores de compilación siguiente:
error: floating-point literal cannot appear in a constant-expression
error: 'std::abs' cannot appear in a constant-expression
error: a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
error: a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
error: a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
error: a cast to a type other than an integral or enumeration type cannot appear in a constant-expression
error: a function call cannot appear in a constant-expression
error: template argument 1 is invalid
Cómo corregir la línea anterior con el fin de hacer pasar la compilación?
PD No tengo acceso a las características de C++ 0x y std :: static_assert, es por eso que estoy usando el assert estático de boost.
+1: Esto es matemáticamente mejor. Pero la pregunta es, cómo resolver su error de compilación. –
@Martijn Creo que arriba es la única manera. Ver la respuesta de Konrad –