मेरे पास एक इंटरफ़ेस क्लास MyFunction
है।इंटरफ़ेस से अवांछित फ़ंक्शंस को कैसे हटाएं
virtual bool Eval(int& iReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;
virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;
virtual bool Eval(char*& zReturnVal, size_t szArgumentCount, list<Param> lParameterList) = 0;
अब, MyFunction
के किसी भी कार्यान्वयन केवल मूल्य किस प्रकार इसे वापस करने की जरूरत पर निर्भर करता है इन कार्यों में से एक को लागू करने की आवश्यकता होगी: वहाँ निम्नलिखित हस्ताक्षरों के साथ इस वर्ग में तीन कार्य हैं। लेकिन मुझे अन्य 3 कार्यों को लागू करना होगा, भले ही अन्य दो कार्य इस तरह हों:
virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
जो इतना अच्छा नहीं दिखता है। या, मैं इस तरह के तीनों कार्यों को इंटरफ़ेस में घोषित कर सकता हूं:
virtual bool Eval(int& iReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
virtual bool Eval(double& dReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
virtual bool Eval(char*& zReturnVal, size_t szArgumentCount, list<Param> lParameterList){return false;}
जो बदसूरत दिखता है। इन दोनों की कम बदसूरत क्या है? या ऐसा करने का एक बेहतर तरीका है?
संपादित करें:
डी ईद्भूजर की विधि पर:
#include <iostream>
using namespace std;
class Base
{
public:
template<typename T>
void F(T){cout << "Type T" << endl;}
};
class Imp : public Base
{
public:
template<int>
void F(int){cout << "Type int" << endl;}
};
int main(int argc, char** argv)
{
Base* pB;
Imp oI;
pB = &oI;
pB->F(1);
}
विशेषज्ञता तरह लग रहा है वर्गों में लागू नहीं होता है, हालांकि व्युत्पन्न। चूंकि टेम्पलेट फ़ंक्शन आभासी नहीं हो सकते हैं, यह एक निराशाजनक स्थिति है जो ऐसा लगता है।
आप के लिए हो सकता है कि जो खोज रहे हैं 'बढ़ावा देने :: संस्करण की तरह कुछ है' एक भी समारोह के पैरामीटर के लिए। –
GManNickG
कोई बढ़ावा नहीं कृपया। :)। इसका उपयोग नहीं कर सकतेमुझे कुछ चाहिए जो मैं अपने आप बना सकता हूं। – nakiya
यदि आपके इंटरफ़ेस में अन्य शुद्ध वर्चुअल फ़ंक्शन हैं, तो दूसरे के साथ जाएं। आपको अधिक शुद्ध वर्चुअल फ़ंक्शंस होने से और अधिक "शुद्धता" नहीं मिलेगी, और आपको वह प्रभाव मिलेगा जो आप चाहते हैं। यदि आप चाहते हैं कि आप यह सुनिश्चित करने के लिए कुछ चाल तैयार कर सकें कि कम से कम एक 'Eval() 'फ़ंक्शंस सच हो सकता है, लेकिन यह काला जादू हो सकता है। –