"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكن استخدام metaprogramming C ++ لإنشاء صفائف ثابتة للوقت؟

هل يمكن استخدام metaprogramming C ++ لإنشاء صفائف ثابتة للوقت؟

نشر في 2025-02-06
تصفح:115

Can C   Metaprogramming Be Used for Dynamically Creating Compile-Time Static Arrays? 
صفائف الحجم. ومع ذلك ، بالنسبة لبعض السيناريوهات ، قد يكون من المرغوب فيه تعيين القيم برمجياً في وقت الترجمة. تستكشف هذه المقالة تقنيات metaprogramming لتحقيق مثل هذا الإنشاء الديناميكي للمصفوفات الثابتة. قائمة الوسيطة قالب المتغير. يحتوي هذا الحل البديل على قيود بسبب أقصى عمق لتثبيت القالب.

السؤال 2: تعيين القيمة الانتقائية

لتعيين القيم بشكل انتقائي في وقت الترجمة ، يمكن توظيف مزيج من قوالب variadic و metafunts. يعمل قالب Metafunc كحزمة معلمة تنشئ سلسلة من القيم بناءً على فهرسها. يمكن بعد ذلك إنشاء قالب enderate_array مجموعة من الحجم المطلوب باستخدام القيم التي تم إنشاؤها. } ؛ قالب class f & gt ؛ struct generate_array { typedef typename generate_array_impl :: result result ؛ } ؛ قالب class f ، unsigned ... args & gt ؛ struct generate_array_impl { typedef typename generate_array_impl :: value ، args ...> :: result result ؛ } ؛ قالب class f ، غير موقعة ... args & gt ؛ struct cenerate_array_impl :: value ، args ... & gt ؛ نتيجة؛ } ؛ قالب & lt ؛ غير موقعة ... args & gt ؛ struct arrayholder { بيانات ثابتة غير موقعة [sizeof ... (args)] ؛ } ؛ قالب & lt ؛ غير موقعة ... args & gt ؛ const غير موقعة arrayholder & lt ؛ args ... & gt ؛ :: data [sizeof ... (args)] = {args ...} ؛ const size_t count = 5 ؛ typedef generate_array :: result a ؛ لـ (size_t i = 0 ؛ i

يحدد هذا المثال صفيفًا ثابتًا من الحجم 5 ، مع القيم {1 ، 2 ، 3 ، 4 ، 5} في وقت الترجمة باستخدام metafunc metafunction.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3