के रूप में पारित किया गया है मैं तर्क के रूप में सी ++ टेम्पलेट फ़ंक्शन को पार करने वाले नियमों की तलाश में हूं।फ़ंक्शन टेम्पलेट तर्क
यह सी के द्वारा समर्थित है ++ के रूप में यहां एक उदाहरण के द्वारा दिखाया:
#include <iostream>
void add1(int &v)
{
v+=1;
}
void add2(int &v)
{
v+=2;
}
template <void (*T)(int &)>
void doOperation()
{
int temp=0;
T(temp);
std::cout << "Result is " << temp << std::endl;
}
int main()
{
doOperation<add1>();
doOperation<add2>();
}
इस तकनीक के बारे में सीखना मुश्किल है, लेकिन। Googling for "function as a template argument" ज्यादा नहीं लेता है। और क्लासिक C++ Templates The Complete Guide आश्चर्यजनक रूप से भी इस पर चर्चा नहीं करता है (कम से कम मेरी खोज से नहीं)।
मेरे पास प्रश्न हैं कि यह वैध C++ (या केवल कुछ व्यापक रूप से समर्थित एक्सटेंशन) है या नहीं।
इसके अलावा, क्या इस तरह के टेम्पलेट आमंत्रण के दौरान स्पष्ट कार्यों के साथ एक ही हस्ताक्षर के साथ एक मज़ेदार को एक दूसरे के साथ उपयोग करने की अनुमति देने का कोई तरीका है?
निम्नलिखित उपरोक्त प्रोग्राम में कम से कम Visual C++ में काम करता है, क्योंकि वाक्यविन्यास स्पष्ट रूप से गलत है। यदि आप एक कस्टम तुलना ऑपरेशन को परिभाषित करना चाहते हैं तो एक फंक्शन पॉइंटर या फ़ैक्टर को std :: sort algorithm पर पारित करने के तरीके के समान, यह एक अच्छा फ़ंक्शन के लिए फ़ंक्शन को स्विच करने में सक्षम होना अच्छा होगा। सी ++ टेम्पलेट्स किताब में एक वेब लिंक या दो, या एक पृष्ठ पर
struct add3 {
void operator() (int &v) {v+=3;}
};
...
doOperation<add3>();
प्वाइंटर की सराहना की होगी!
टेम्पलेट तर्क के रूप में एक समारोह का क्या लाभ है साथ मेरे लिए काम किया? रिटर्न प्रकार टेम्पलेट प्रकार का उपयोग नहीं किया जाएगा? – DaClown