我有很多这样的代码:
#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<0>::f() 和 A<1>::f() 的 A::f() 的几乎整个代码。我也不想调用函数而不是以前的#ifdefs。常见的解决方案是什么?