سؤال

وأحتاج إلى وظيفة الذي يحدد سياسة لصفي لعرض العناصر. منها مثلا:

SetDisplayPolicy(BOOLEAN_PRED_T f)

وهذا على افتراض BOOLEAN_PRED_T هو على الوظائف المؤشر لبعض منطقية نوع المسند مثل:

typedef bool (*BOOLEAN_PRED_T) (int);

وأنا مهتم فقط في منها مثلا: عرض شيء عندما المسند مرت صحيح، لا يتم عرض عندما يكون كاذبة

.

والمثال أعلاه يعمل لوظائف تعود منطقي وأخذ عدد صحيح، ولكن انا بحاجة الى مؤشر عام للغاية بالنسبة للحجة SetDisplayPolicy، لذلك فكرت في UnaryPredicate، لكنه في دفعة ذات الصلة. كيف يمكنني تمرير المسند الأحادية إلى وظيفة في STL / C ++؟ سوف unary_function< bool,T > لا يعمل لأنني بحاجة منطقي كقيمة العودة، ولكن أريد أن أسأل المستخدم لمجرد "وظيفة الأحادية التي تقوم بإرجاع منطقي"، في النهج الأكثر عام.

وفكرت في اشتقاق نوع بلدي على النحو التالي:

template<typename T>
class MyOwnPredicate : public std::unary_function<bool, T>{};

ويمكن أن يكون نهجا جيدا؟

هل كانت مفيدة؟

المحلول

وبدوره SetDisplayPolicy في قالب وظيفة:

template<typename Pred>
void SetDisplayPolicy(Pred &pred)
{
   // Depending on what you want exactly, you may want to set a pointer to pred,
   // or copy it, etc.  You may need to templetize the appropriate field for
   // this.
}

وبعد الاستخدام، والقيام به:

struct MyPredClass
{
   bool operator()(myType a) { /* your code here */ }
};

SetDisplayPolicy(MyPredClass());

في رمز العرض الذي من شأنه ثم د سوميتينج مثل:

if(myPred(/* whatever */)
   Display();

وبطبيعة الحال، functor الخاص بك قد الحاجة إلى وجود دولة وكنت قد ترغب المنشئ الخاص به للقيام الاشياء، الخ وهذه النقطة هي أن SetDisplayPolicy لا يهمه ما تعطيه (بما في ذلك مؤشر دالة)، شريطة أن يمكن عصا استدعاء دالة على ذلك ونعود bool.

تعديل: و كما قال CSJ، هل يمكن أن ترث من unary_function المحكمة الخاصة بلبنان التي يفعل الشيء نفسه، وسوف أيضا شراء لك typedef اثنين argument_types وresult_type

نصائح أخرى

وأنت على الطريق الصحيح منذ المقصود unary_function كطبقة قاعدة. ومع ذلك، لاحظ أن المعلمة الأولى من المفترض أن يكون argument_type والثاني هو RESULT_TYPE. ثم، كل ما عليك القيام به هو تنفيذ المشغل ()

template<typename T>
struct MyOwnPredicate : public std::unary_function<T,bool>
{
    bool operator () (T value)
    {
        // do something and return a boolean
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top