2015-01-07 15 views
5

const配列に要素を含めることを有効または無効にするにはどうすればよいですか? Cではconst配列内の要素を有効または無効にする

struct country { 
    const string name; 
    ulong pop; 
}; 

static const country countries[] = [ 

    {"Iceland", 800}, 
    {"Australia", 309}, 
//... and so on 
//#ifdef INCLUDE_GERMANY 
version(include_germany){ 
    {"Germany", 233254}, 
} 
//#endif 
    {"USA", 3203} 
]; 

、あなたは、 を有効にするか、配列内の特定の要素を無効にするために#ifdefを使用することができますが、あなたはDでどのようにしていることだろうか?

答えて

3

いくつかの方法があります。

static const country[] countries = [ 
    country("Iceland", 800), 
    country("Australia", 309), 
] ~ (include_germany ? [country("Germany", 233254)] : []) ~ [ 
    country("USA", 3203) 
]; 

あなたはまた、計算し、配列を返す関数を書くことができ、それとのconst値を初期化します。一つの方法は、三項演算子を使用して、条件付き配列を付加することです。関数はコンパイル時に評価されます(CTFE)。

+0

typo:include_germary。同棲者がラングでない限り無効です。ドイツのこの重要な国Germar ^^ –

+0

固定:) また、 'include_germany'はバージョンではなく定数であると予想されるので、' const'/'enum'を使って宣言する必要があります。 '-version'で動作させるには、以下の@BBazの答えを参照してください。 –

+0

残念ながら、これはコンパイルされません... – user1461607

1

カスタムスイッチ-version=include_germanyでコンパイルできます。コードでは、静的なブール値を定義します。

static bool include_germany; 
version(include_germany){include_germany = true;} 

を配列を作成するにはCyber​​Shadowの答えで説明したように、その後同じです。

+0

私は 'static'ではなく' const'または 'enum'が必要だと思います。 –

関連する問題