في 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