tengo el siguiente código dentro de una clase de C++:Turning # de ifdef en un metaprograma plantillas de C++
class Features
{
#define Feature_Size_A 12345
#define Feature_Size_B 45678
#define Feature_Size_C 78901
//#define Feature_Size_D 14725
const int Feature_Sum = 0
#ifdef Feature_Size_A
+ Feature_Size_A
#endif
#ifdef Feature_Size_B
+ Feature_Size_B
#endif
#ifdef Feature_Size_C
+ Feature_Size_C
#endif
#ifdef Feature_Size_D
+ Feature_Size_D
#endif
;
#ifdef Feature_Size_A
static float Feature_A[Feature_Size_A];
#endif
#ifdef Feature_Size_B
static float Feature_B[Feature_Size_B];
#endif
#ifdef Feature_Size_C
static float Feature_C[Feature_Size_C];
#endif
#ifdef Feature_Size_D
static float Feature_D[Feature_Size_D];
#endif
};
Solía comentar características, como la línea 4, para compilar y ejecutar diferentes pruebas. Pero ahora me gustaría tener la clase como plantilla, así que puedo instanciar varias versiones con diferentes características activadas o desactivadas en el mismo programa.
Estoy pensando en algo como esto:
template <bool Feature_A, bool Feature_B, bool Feature_C, bool Feature_D>
class Features
{
...
};
Features<true, true, true, false> f;
he intentado con impulso :: MPL: vector de, pero estoy luchando con dureza.
BTW: Este no es el código completo. El código original tiene 25 características.
Estoy agradecido por cada idea que no impliquen macros :-)
¿Cómo se usan las funciones? ¿Se accede desde el exterior de la clase 'Features'? ¿Deberían ser accesibles con un nombre específico o es aceptable un acceso indexado? ¿Son todas matrices flotantes? –