اختر حجة قالب في وقت التشغيل في C ++
سؤال
لنفترض لدي مجموعة من الوظائف والطبقات التي قالب لاستخدام واحد (float
) أو double
الدقة. بالطبع يمكنني أن أكتب اثنين فقط قطعة من رمز التمهيد، أو الفوضى مع وحدات الماكرو. ولكن يمكنني التبديل فقط حجة قالب في وقت التشغيل؟
المحلول
لا، لا يمكنك التبديل الحجج القالب في وقت التشغيل، حيث يتم إنشاء مثيل القوالب التي كتبها المترجم في الترجمة من الوقت. ما كنت <م> يمكن م> القيام به هو أن يكون كل من القوالب مستمدة من فئة أساسية مشتركة، دائما استخدام الفئة الأساسية في التعليمات البرمجية، ومن ثم تقرر أي فئة مشتقة لاستخدامها في وقت التشغيل:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
وحدات الماكرو لديها نفس المشكلة كقوالب، في أن يتم توسيع أنها في الترجمة من الوقت.
نصائح أخرى
وقوالب هي آلية وقت الترجمة. راجع للشغل، وحدات الماكرو هي كذلك (بالمعنى الدقيق للكلمة - آلية تجهيزها - التي تأتي حتى قبل تجميع).
وقوالب هي محض وقت بناء الترجمة والمترجم وتوسيع قالب وخلق لكم من الدرجة / وظيفة مع الوسيطة المحددة ومباشرة ترجمة ذلك إلى رمز.
إذا كنت تحاول تبديل بين foo<float>
وfoo<double>
في وقت التشغيل، فسوف تحتاج إما إلى استخدام بعض الحيل metaprogramming أو يكون مجرد مسارات كود منفصلة لكل منها.