पर टेम्पलेट पैरामीटर के रूप में विधि के हस्ताक्षर को स्थानांतरित करना मैं अपनी परियोजनाओं में डेटा-हैंडलिंग कक्षाओं के लिए एक टेम्पलेट इंटरफ़ेस बनाना चाहता हूं।किसी वर्ग
मैं कुछ इस तरह लिख सकते हैं:
template <class T>
class DataHandler
{
public:
void Process(const& T) = 0;
};
फिर, लगता है, मैं एक वर्ग इस तरह से परिभाषित करते हैं:
class MyClass: public DataHandler<int>
{
void Process(const int&) { /* Bla-bla */ }
}
अब, सवाल आते हैं, मैं किसी भी तरह में मेरे टेम्पलेट इंटरफेस परिभाषित कर सकते हैं जिस तरह से पैरामीटर के रूप में यह प्राप्त नहीं होगा, केवल टी टाइप करें, लेकिन प्रक्रिया() फ़ंक्शन का पूरा हस्ताक्षर।
class MyClass: public DataHandler<void (int&)>
{
void Process(const int&) { /* Bla-bla */ }
}
क्या यह संभव है:
मैं इस तरह से काम कर रहे कुछ चाहते हैं? मुझे पता है कि, उदाहरण के लिए, बूस्ट :: सिग्नल इस तरह टेम्पलेट पैरामीटर प्राप्त करता है, लेकिन, अगर मैं सही ढंग से समझता हूं, तो वे वहां बहुत सारे काले जादू का उपयोग करते हैं।
अब प्रश्न बना रहता है: जब तक हम काम पर दैनिक उपयोग के लिए विविध टेम्पलेट्स डाल सकते हैं तब तक कितने साल लगेंगे। यह जानना कि यह कितना आसान हो सकता है ... –
और डेटाप्रोडर्स इंटरफ़ेस में प्रक्रिया() फ़ंक्शन में एक से अधिक पैरामीटर का समर्थन करने के लिए मैं इसे कैसे बदलूं? मेरा मतलब है, मैं डेटाहैंडलर –
Lev
@Lev जैसे कुछ का समर्थन करना चाहता हूं, मुझे संदेह है कि आपको फ़ंक्शन प्रकार पर आंशिक रूप से 'डेटाहैंडलर' का विशेषज्ञ होना होगा ताकि आपको 'प्रक्रिया' फ़ंक्शन घोषणा मिल सके ठीक है 'बूस्ट :: फंक्शन' आवश्यक कोड जेनरेट करने के लिए प्रीप्रोसेसर का उपयोग करता है, लेकिन अपनी परियोजनाओं और कुछ उपयोगों के लिए, यह उस विषय में खुद को पेश करने के लिए शायद ही कभी उपयोगी है (मेरी राय में) आप शायद बाद में इसकी आवश्यकता नहीं है। तो बस 4 बार कॉपी/पेस्ट करें और किया जाए :) –