2013-02-24 25 views
7

मेरे पास ग्राफ नामक एक सी ++ कक्षा है, और इसमें_each_node() के लिए एक एल्गोरिदम विधि है। मैं इसे एक टेम्पलेट बना सकते हैं या तो, इस तरह:एल्गोरिदम फ़ंक्शन: इसे टेम्पलेट बनाएं या std :: function पैरामीटर लें?

template <class UnaryFunction> 
UnaryFunction Graph::for_each_node (UnaryFunction f) 
{ 
    /* ... */ 
} 

या उसका उपयोग std :: समारोह, इस तरह करते हैं:

typedef std::function<void (Node&)> ForEachNodeFunc; 

ForEachNodeFunc Graph::for_each_node (ForEachNodeFunc f) 
{ 
    /* ... */ 
} 

स्टैंडर्ड एल्गोरिदम, उदा std :: for_each, पहले दृष्टिकोण का उपयोग करें, जबकि कुछ पुस्तकालय, उदा। gtkmm (जो जीटीके + का सी ++ बाध्यकारी है), उन्हें युक्त वस्तुओं के फ़ंक्शन पॉइंटर्स के रूप में कार्य करें।

प्रत्येक विकल्प के फायदे और डाउनसाइड्स क्या हैं? मुझे यकीन नहीं है कि कौन सा चयन करना है। पसंद को क्या प्रभावित करना चाहिए: क्या मेरा ग्राफ क्लास एक क्लास टेम्पलेट है, या एल्गोरिदम विधि या गति आवश्यकताओं के साथ कितने अलग फ़ंक्शंस का उपयोग करने की उम्मीद है?

उत्तर

5

एंडी छिपकर द्वारा इस जवाब पर एक नजर डालें, मुझे लगता है कि यह आंशिक रूप से आपके प्रश्न पर जवाब के रूप में अच्छी तरह से है:

सामान्य तौर पर अगर आप एक डिजाइन स्थिति यह है कि आपके पास एक विकल्प, उपयोग टेम्पलेट्स देता सामना कर रहे हैं। ..

https://stackoverflow.com/a/14678298/1758762 (std :: समारोह टेम्पलेट बनाम)

+1

मैं देख रहा हूँ ... एक बहुरूपी आवरण तो std :: समारोह का लाभ किया जा रहा है, और जब बहुरूपता की जरूरत नहीं है, टेम्पलेट्स हैं आम तौर पर बेहतर – cfa45ca55111016ee9269f0a52e771

संबंधित मुद्दे