我有很多这样的代码:模板参数,#define和代码重复
#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
}
,我想用模板参数来代替#定义:
template < int WITH_FEATURE_X > // can be 0 or 1
struct A;
但我对于A < 0> :: f()和A < 1> :: f(),几乎不需要为几条依赖于参数的行重复几乎整个A :: f()的代码。我也不想调用函数而不是以前的#ifdefs。什么是常用解决方案?
是,一些类似“静若”似乎是必要的。也许在这种情况下,可以使用boost模板(比如enable_if)吗? 恐怕函数会让代码变得非常混乱,会有嵌套的调用,代码会变得非常虚假,难以理解,并且可能会因速度而优化得更少。 – Thomas 2010-09-01 06:35:13
这对于helper :: A来说是个不错的主意!我会在后面尝试重新编写一些带有函数和你的技巧的#ifdefs,看看我是否喜欢res ULT。 – Thomas 2010-09-01 07:32:45