تهيئة أنيقة لـ std::array مع نوع غير افتراضي قابل للإنشاء
تهيئة std::array بـ غير افتراضي- يمكن أن يكون نوع العنصر القابل للإنشاء مهمة مرهقة. يعد تكرار القيمة n مرات يدويًا أمرًا غير فعال وعرضة للخطأ بالنسبة لـ n الكبيرة.
لمعالجة هذه المشكلة، يتضمن النهج الأكثر أناقة استخدام نوع التسلسل والمولد. الفكرة الأساسية هي إنشاء سلسلة من المؤشرات من 0 إلى n-1 ثم استخدام دالة لتطبيق قيمة بشكل متكرر على كل فهرس.
إليك التنفيذ:
template
auto repeat(T value, seq) -> std::array
{
// Unpack N, repeating `value` sizeof...(N) times
// Note that (X, value) evaluates to value
return {(N, value)...};
}
لتهيئة مصفوفة std::array باستخدام هذا الأسلوب:
template
void f(T value)
{
// genseq_t is seq
std::array items = repeat(value, genseq_t{});
}
بالإضافة إلى ذلك، يتم استخدام التعريفات التالية:
template
struct seq
{
using type = seq;
static const std::size_t size = sizeof ... (N);
template
struct push_back : seq {};
};
template
struct genseq : genseq::type::template push_back {};
template
struct genseq : seq {};
template
using genseq_t = typename genseq::type;
يوفر هذا الحل طريقة فعالة وأنيقة لتهيئة المصفوفة std::array بأنواع غير قابلة للإنشاء بشكل افتراضي، بغض النظر عن قيمة n.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3