次のようなコードがたくさんあります。
#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
}
#defines をテンプレート パラメーターに置き換えたいと思います。
template < int WITH_FEATURE_X > // can be 0 or 1
struct A;
しかし、パラメーターに依存する数行だけのために、 A::f() の A<0>::f() および A<1>::f() のコード全体をほぼ複製したくありません。また、以前の #ifdef の代わりに関数を呼び出したくありません。一般的な解決策は何ですか?