que tengo una gran cantidad de código como este:parámetros de plantilla, #define y la duplicación de código
#define WITH_FEATURE_X
struct A {
#ifdef WITH_FEATURE_X
// ... declare some variables Y
#endif
void f();
};
void A::f() {
// ... do something
#ifdef WITH_FEATURE_X
// ... do something and use Y
#else
// ... do something else
#endif
// ... do something
}
y que me gustaría cambiar las #defines con los parámetros de plantilla:
template < int WITH_FEATURE_X > // can be 0 or 1
struct A;
Pero I no quiero duplicar casi todo el código de A :: f() para A < 0> :: f() y A < 1> :: f() solo para las pocas líneas que dependen del parámetro. Tampoco quiero llamar a funciones en lugar de los #ifdefs anteriores. ¿Cuál es la solución común?
Sí, algo similar a "estática si" parece ser necesario. Tal vez eso es posible en este caso con las plantillas boost (como enable_if)? Me temo que las funciones llenan el código mucho, habría llamadas anidadas, y el código se volvería bastante artificial, ilegible y quizás menos optimizado para la velocidad. – Thomas
Esa es una buena idea con helper :: A! Voy a tratar de recodificar algunos #ifdefs con funciones y tu truco más tarde y ver si me gusta el res ult. – Thomas