我在 C++ 类中有以下代码:
class Features
{
#define Feature_Size_A 12345
#define Feature_Size_B 45678
#define Feature_Size_C 78901
//#define Feature_Size_D 14725
const int Feature_Sum = 0
#ifdef Feature_Size_A
+ Feature_Size_A
#endif
#ifdef Feature_Size_B
+ Feature_Size_B
#endif
#ifdef Feature_Size_C
+ Feature_Size_C
#endif
#ifdef Feature_Size_D
+ Feature_Size_D
#endif
;
#ifdef Feature_Size_A
static float Feature_A[Feature_Size_A];
#endif
#ifdef Feature_Size_B
static float Feature_B[Feature_Size_B];
#endif
#ifdef Feature_Size_C
static float Feature_C[Feature_Size_C];
#endif
#ifdef Feature_Size_D
static float Feature_D[Feature_Size_D];
#endif
};
我曾经注释掉特性,比如第 4 行,以编译和运行不同的测试。但是现在我想把这个类作为一个模板,这样我就可以在同一个程序中实例化几个不同功能的版本。
我在想这样的事情:
template <bool Feature_A, bool Feature_B, bool Feature_C, bool Feature_D>
class Features
{
...
};
Features<true, true, true, false> f;
我尝试了 boost::mpl:vector's 但我正在苦苦挣扎。
顺便说一句:这不是完整的代码。原始代码有 25 个特征。
我很感谢不涉及宏的每个想法:-)