هل هناك طريقة للتعامل مع عدد متغير من المعلمات في فئة قالب؟

StackOverflow https://stackoverflow.com/questions/154780

سؤال

ولدي مجموعة من الطبقات رد التي تستخدم لمعالجة الاسترجاعات مع أعداد مختلفة من المعلمات. الآن لدي حوالي 6 حالات مختلفة منه للتعامل مع أعداد مختلفة من الحجج. هل هناك طريقة لجعل حالة واحدة مما يمكن التعامل مع عدد متغير من الوسائط ؟؟ في النهاية أنا أحب أن يكون كل معلمة يكون نوع POD أو مؤشر الطبقة، أو مؤشر البنية. أي أفكار؟

template <class T>
class kGUICallBackPtr
{
public:
    kGUICallBackPtr() {m_obj=0;m_func=0;}
    void Set(void *o,void (*f)(void *,T *));
    inline void Call(T *i) {if(m_func) m_func(m_obj,i);}
    inline bool IsValid(void) {return (m_func!=0);}
private:
    void *m_obj;
    void (*m_func)(void *,T *);
};


template <class T,class U>
class kGUICallBackPtrPtr
{
public:
    kGUICallBackPtrPtr() {m_obj=0;m_func=0;}
    void Set(void *o,void (*f)(void *,T *,U *));
    inline void Call(T *i, U *j) {if(m_func) m_func(m_obj,i,j);}
    inline bool IsValid(void) {return (m_func!=0);}
private:
    void *m_obj;
    void (*m_func)(void *,T *,U *j);
};
هل كانت مفيدة؟

المحلول

وليس بعد في اللغة نفسها ولكن C ++ 0X سوف يكون الدعم ل قوالب variadic .

نصائح أخرى

وC ++ 0X قوالب variatdic هو أفضل رهان، لكنها ستكون أيضا بعض الوقت قبل أن تتمكن من استخدامها.

إذا كنت بحاجة إلى متواليات من أنواع اليوم، نلقي نظرة على MPL في <لأ href = "http://www.boost.org/doc/libs/1_36_0/libs/mpl/doc/refmanual/vector.html" يختلط = "noreferrer نوفولو"> ناقلات أنواع، فضلا عن غيرها من أنواع نوع التسلسل. انها جزء من زيادة المكتبة. انها تسمح لك لتوفير حجة القالب الذي هو سلسلة من أنواع، بدلا من مجرد نوع واحد.

وماذا عن يتهرب هذه المسألة من خلال استخدام تفعيل ربط ؟ هل يمكن أن تجعل التعليمات البرمجية تقبل حجة واحدة، أو لا شيء على الإطلاق، وربط الحجج التي تحتاج إليها في الموقع المكالمة.

وخياري الاول سيكون لاستخدام دفعة :: ربط وتعزيز :: وظيفة، أو الأمراض المنقولة جنسيا :: ربط / الأمراض المنقولة جنسيا :: وظيفة و / أو ج ++ 11 امدا لتحقيق هدفك. لكن اذا كنت بحاجة للفة functor الخاصة بك ثم أود أن استخدام دفعة الاندماج لخلق 'functor تنصهر "أن يأخذ حجة قالب واحد.

http://www.boost.org/doc/libs/1_41_0/libs/fusion/doc/html/fusion/functional/generation/functions/mk_fused.html

وأخيرا كل من هذه المكتبات استخدام وحدات الماكرو قبل المعالج لتعداد كافة الخيارات الممكنة للتغلب على عدم وجود قوالب varidic.

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