بالطبع، يُعتبر الاستخدام المباشر لكائن std::initializer_list
لتهيئة مصفوفة من المتغيرات غير الممكن عن طريق تقديمها كمعامل مباشر لتهيئة المصفوفة. فهذه الطريقة مقصورة على الاستخدام مع تهيئة المصفوفات المكدسة أو std::array
. ويأتي ذلك من الفكرة الأساسية لـ std::initializer_list
التي تستخدم عادة لتهيئة أشياء مثل الـ std::vector
والـ std::initializer_list
وغيرها من الهياكل التي لا تكون مباشرةً قابلة للنسخ.
وبما أن مصفوفات الـ C++ ليست بالهياكل التي تقبل النسخ المباشر من std::initializer_list
، فيجب البحث عن وسيلة بديلة. يُمكن القيام بذلك عن طريق استخدام بناء وظيفة مخصصة لتحقيق الهدف المطلوب. على سبيل المثال، يمكنك كتابة دالة تقوم بتلقي std::initializer_list
وتنقل عناصره إلى مصفوفة معينة.
فلنقم بكتابة دالة تقوم بذلك:
cpp#include
#include
#include
template <typename T, size_t N>
std::array initializeArray(std::initializer_list il) {
std::array arr;
size_t i = 0;
for (const auto& elem : il) {
arr[i++] = elem;
if (i >= N) break; // avoid buffer overflow
}
return arr;
}
int main() {
std::initializer_list<int> il = { 1, 2, 3 };
constexpr std::initializer_list<int> il_constexpr = { 1, 2, 3 };
std::array<int, 3> arr5 = initializeArray<int, 3>(il);
std::array<int, 3> arr6 = initializeArray<int, 3>(il_constexpr);
for (const auto& elem : arr5) {
std::cout << elem << " ";
}
std::cout << std::endl;
for (const auto& elem : arr6) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
هذا المثال يستخدم دالة initializeArray
المخصصة لتلقي std::initializer_list
وتحويلها إلى مصفوفة. يُمكنك استدعاء هذه الدالة بسهولة واستخدامها لتهيئة المصفوفات باستخدام std::initializer_list
كمدخلات.
المزيد من المعلومات
بالطبع، دعني أقدم لك المزيد من المعلومات حول هذا الموضوع.
في البداية، يُشير استخدام std::initializer_list
في C++ إلى هيكل بيانات يُستخدم لتمثيل قوائم من القيم المُهيّأة في وقت التشغيل. يُمكن استخدامها لتهيئة مجموعة متنوعة من الهياكل بيانات في C++، مثل الـ std::vector
والـ std::array
وأي هيكل آخر يُمكن تهيئته باستخدام قوسين معترف بهما في C++.
ومن الجدير بالذكر أن std::initializer_list
تُستخدم عادة في تعريف واجهات وظيفية تأخذ عددًا متغيرًا من المعاملات. تُسهِّل استخداماتها مرور مجموعة من القيم إلى تلك الوظائف بطريقة تشبه تمرير مصفوفات أو مجموعات.
ومع ذلك، يُلاحظ أن استخدام std::initializer_list
مباشرةً لتهيئة مصفوفات في C++ غير مدعوم بشكل مباشر. ولكن يمكن التغلب على هذه القيود عن طريق استخدام بنية الدالة المخصصة كما تم توضيحه في المثال السابق.
بالإضافة إلى ذلك، يُمكن استخدام std::initializer_list
في العديد من السياقات الأخرى في C++، مثل تهيئة الكائنات في الفصائل الأساسية والتهيئة الاستعراضية.
عمومًا، يُمثل std::initializer_list
أداة مهمة في C++ تُسهِّل عمليات التهيئة الخاصة بالهياكل بيانات المتغيرة الحجم وتُمكِّن من تحقيق كود أكثر وضوحًا وسهولة قراءة.