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 を試してみましたが、ひどく苦労しています。
ところで: これは完全なコードではありません。元のコードには 25 個の機能があります。
マクロを含まないすべてのアイデアに感謝します:-)