2015-01-07 9 views
5

में तत्वों को सक्षम या अक्षम करें एक कॉन्स्ट एरे में तत्वों को शामिल करने में सक्षम/अक्षम कैसे करता है?कॉन्स्ट एरे

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 उपयोग कर सकते हैं लेकिन आप कैसे डी में है कि क्या करेंगे?

उत्तर

3

ऐसे कई तरीके हैं।

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

आपको ऐसे फ़ंक्शन जो गणना करता है और सरणी देता है लिख सकते हैं, तो इसके साथ एक const मूल्य प्रारंभ: एक तरह से सशर्त एक सरणी संलग्न करने के लिए, त्रिगुट ऑपरेटर का उपयोग है। समारोह का संकलन समय (सीटीएफई) पर किया जाएगा।

+0

टाइपो: include_germary। अमान्य जब तक कि गैरेज लैंग न हो। रोगाणु का। Germar, –

+0

^^ इस महत्वपूर्ण राष्ट्र फिक्स्ड :) इसके अलावा, मैं, का उल्लेख किया जाना चाहिए था कि 'include_germany' एक स्थिर, एक संस्करण नहीं होने की उम्मीद है इसलिए इसे प्रयोग' const'/'enum' घोषित किया जाना चाहिए। इसे '-वर्जन' के साथ काम करने के लिए नीचे @BBaz 'उत्तर देखें। –

+0

दुर्भाग्यवश यह संकलित नहीं करता है ... – user1461607

1

आप कस्टम के साथ संकलन कर सकते हैं -version=include_germany स्विच करें।

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

निर्माण करने के लिए सरणी CyberShadow जवाब में वर्णित विधि से समान होता है: कोड में आप एक स्थिर bool परिभाषित करते हैं।

+0

मुझे लगता है कि आपको 'स्थिर' या 'enum' की आवश्यकता है, न कि' स्थिर '। –