2015-01-07 16 views
5

Bir const dizisinde öğelerin dahil edilmesi nasıl etkinleştirilir/devre dışı bırakılır? CYapılandırma dizisindeki öğeleri etkinleştirme veya devre dışı bırakma

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} 
]; 

, sen etkinleştirmek veya dizideki belirli bir eleman devre dışı bırakmak için #Ifdef kullanabilirsiniz ancak D nasıl bunu yapar?

cevap

3

Çeşitli yollar vardır.

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

Ayrıca hesaplar ve diziyi döndüren bir işlev yazabilirsiniz, sonra onunla bir const değerini başlatmak: Tek yönlü üçlü operatörü kullanarak, şartlı bir dizi eklemektir. Fonksiyon derleme zamanında değerlendirilecektir (CTFE).

+0

yazım hatası: include_germary. Eğer germary lang değilse geçersiz. germinin Germar, bu önemli millet ^^ –

+0

Sabit :) Ayrıca, 'include_germany'nın bir sürüm değil sabit olması beklendiğinden bahsetmeliydim, bu yüzden' const'/'enum' kullanılarak bildirilmelidir. '-version' ile çalışmasını sağlamak için aşağıdaki 'BBaz' yanıtına bakın. –

+0

maalesef bu derleme yapmıyor ... – user1461607

1

Özel anahtar -version=include_germany ile derleyebilirsiniz.

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

CyberShadow cevap anlatıldığı gibi dizi daha sonra aynıdır oluşturmak için: kodunda statik bool tanımlar.

+0

Sanırım “const” veya “enum”, “static” değil. –

İlgili konular