C 0x में, किसी इनिशियलाइज़र सूची के साथ सदस्य ऐरे को आरंभ करने का प्रयास करते समय आपको "असाइनमेंट में असंगत प्रकार" त्रुटि का सामना करना पड़ सकता है .
इसे हल करने के लिए, एक विविध टेम्पलेट कंस्ट्रक्टर का उपयोग करने पर विचार करें इसके बजाय:
struct foo {
int x[2];
template
foo(T... ts) : x{ts...} {}
};
int main() {
// Usage
foo f1(1, 2); // OK
foo f2{1, 2}; // Also OK
foo f3(42); // OK; x[1] zero-initialized
foo f4(1, 2, 3); // Error: too many initializers
foo f5(3.14); // Error: narrowing conversion not allowed
foo f6("foo"); // Error: no conversion from const char* to int
}
यदि 'const' स्थिति को संरक्षित करना आवश्यक नहीं है, तो आप वैकल्पिक रूप से सरणी मान लोड करने के लिए एक फ़ंक्शन नियोजित कर सकते हैं:
struct foo {
int x[2];
foo(std::initializer_list il) {
std::copy(il.begin(), il.end(), x);
}
};
हालाँकि, यह दृष्टिकोण संकलन-समय सीमा जाँच को छोड़ देता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3