Ho un sacco di codice come questo:parametri di modello, #define e la duplicazione del codice
#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
}
e mi piacerebbe sostituire i #defines con parametri di modello:
template < int WITH_FEATURE_X > // can be 0 or 1
struct A;
ma io non voglio duplicare quasi l'intero codice di A :: f() per A < 0> :: f() e A < 1> :: f() solo per le poche righe che dipendono dal parametro. Inoltre, non voglio chiamare funzioni al posto dei precedenti #ifdefs. Qual è la soluzione comune?
Sì, qualcosa di simile a "statico se" sembra essere necessario. Forse questo è possibile in questo caso con i modelli di boost (come enable_if)? Ho paura che le funzioni ingombrino il codice molto, ci sarebbero chiamate nidificate e il codice diventerebbe piuttosto artificiale, illeggibile e forse meno ottimizzato per la velocità – Thomas
Questa è una bella idea con helper :: A! Proverò a ricodificare alcuni #ifdefs con funzioni e il trucco più tardi e vedere se mi piace il res ult. – Thomas