मेरे पास ग्राफ नामक एक सी ++ कक्षा है, और इसमें_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 (जो जीटीके + का सी ++ बाध्यकारी है), उन्हें युक्त वस्तुओं के फ़ंक्शन पॉइंटर्स के रूप में कार्य करें।
प्रत्येक विकल्प के फायदे और डाउनसाइड्स क्या हैं? मुझे यकीन नहीं है कि कौन सा चयन करना है। पसंद को क्या प्रभावित करना चाहिए: क्या मेरा ग्राफ क्लास एक क्लास टेम्पलेट है, या एल्गोरिदम विधि या गति आवश्यकताओं के साथ कितने अलग फ़ंक्शंस का उपयोग करने की उम्मीद है?
मैं देख रहा हूँ ... एक बहुरूपी आवरण तो std :: समारोह का लाभ किया जा रहा है, और जब बहुरूपता की जरूरत नहीं है, टेम्पलेट्स हैं आम तौर पर बेहतर – cfa45ca55111016ee9269f0a52e771