का पूर्ण प्रारंभिक क्रियान्वयन करने का कोई तरीका है, मैं std::array<size_t, N>
(एन एक निश्चित टेम्पलेट-चर) का उपयोग कर रहा हूं।क्या std :: array
#include<array>
template<size_t N>
struct A{
size_t function(std::array<size_t, N> arr){ return arr[N-1];} // just an example
};
int main(){
A<5> a;
a.function({{1,2,3,4,5}}));
}
और यह ठीक काम करता है। समस्या यह है कि यह अन्य कोड चुपचाप अनुमति दी है है:
A.function({{1,2,3}}));
यही कारण है, यहां तक कि याद तत्वों array
किसी भी तरह आरंभ नहीं हो जाता के साथ, भले ही वह अच्छी तरह से परिभाषित किया गया है (शेष जैसे तत्वों शून्य करने के लिए प्रारंभ, मुझे यकीन है कि नहीं कर रहा हूँ) यह त्रुटियों का एक संभावित स्रोत है।
अतिरिक्त तत्वों के प्रारंभ को लागू करने का कोई तरीका है? ईजी। एक कंपाइलर त्रुटि या एक चेतावनी उत्पन्न करके।
एक विकल्प है कि मैं विचार initializer_list
size_t function2(std::initializer_list<size_t> il){ assert(il.size() == N); ...}
उपयोग करने के लिए समस्या यह है कि यह सबसे अच्छा में एक रनटाइम त्रुटि और हर कॉल में एक चेक उत्पन्न है। मैं एक कंपाइलर त्रुटि/चेतावनी पसंद करेंगे।
मुझे std::array<>{}
के डिफ़ॉल्ट प्रारंभिकरण से बहुत परेशान नहीं है, लेकिन अपूर्ण प्रारंभिकरण से बहुत परेशान नहीं है। (हो सकता है, के बाद से इस T[N]
स्थिर सरणी के व्यवहार से प्राप्त होती है कुछ भी नहीं इसके बारे में क्या किया जा सकता है।)
मैं clang 3.5
और gcc 5
उपयोग करने की कोशिश।
@texasbruce, धन्यवाद, मैंने कोशिश की। समस्या यह है कि 'st' :: array' में 'एन' तर्क से कम से कम नहीं किया जा सकता है (कम से कम मेरे कंपाइलर में), और वहां से 'std :: enable_if' पर मदद नहीं करता है। या आप कुछ अलग मतलब है? –
alfC
मैंने आपके प्रश्न का गलत व्याख्या किया। enable_if यहां मदद नहीं करेगा – texasbruce