सी में एक टेम्पलेट समारोह के रूप में ऐसी कोई चीज नहीं है ++ — लोग क्या लापरवाही के रूप में "टेम्पलेट कार्यों" का उल्लेख वास्तव में समारोह टेम्पलेट्स हैं: टेम्पलेट्स जो कार्यों को परिभाषित।
इस प्रकार, ऊपर दिए गए आपके दूसरे उदाहरण में func
कोई फ़ंक्शन नहीं है, यह एक (फ़ंक्शन) टेम्पलेट है, और इसका उपयोग फ़ंक्शन के रूप में उसी तरह नहीं किया जा सकता है। विशेष रूप से, std::function
किसी फ़ंक्शन के साथ प्रदान करने की अपेक्षा करता है।
आप इस पर कैसे काम कर सकते हैं इस पर निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। आप कोड किसी भी प्रकार से समारोह काम का उपयोग करता है बनाने के लिए कोशिश कर रहे हैं, तो आप बस एक समारोह या वर्ग टेम्पलेट में उस कोड जगह कर सकते हैं:
template <typename T>
void use_function(T t) {
typedef std::function<T(T,T)> Funcp = func<T>;
// use Funcp here
}
तुम क्या करने में सक्षम नहीं होगा क्या, तथापि, है सार्वभौमिक प्रकार क्वांटिफायर ("किसी भी प्रकार पर लागू किया जा सकता है") के साथ देर से बाध्यकारी का उपयोग करें, क्योंकि "किसी भी प्रकार पर लागू किया जा सकता है" को सी ++ में संकलन-समय पर हल किया जाता है। यह ठीक है कि यह कैसे रोल करता है।
स्रोत
2011-03-01 10:32:13
+1। वास्तव में, शब्द "टेम्पलेट फ़ंक्शन" भ्रामक है, "फ़ंक्शन टेम्पलेट" अधिक सटीक है। – suszterpatt
यह एक अच्छा जवाब है, लेकिन यह थोड़ा भ्रामक है। आप 'नहीं' कहते हैं, फिर यह बताने के लिए आगे बढ़ें कि जवाब क्यों है 'हाँ, अगर आप इसे तुरंत चालू करते हैं।' – aboveyou00