سؤال

لنفترض لدي مجموعة من الوظائف والطبقات التي قالب لاستخدام واحد (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 أو يكون مجرد مسارات كود منفصلة لكل منها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top