मैं एक प्रोग्रामिंग समस्या को हल करने की कोशिश कर रहा हूं जिसमें ऑब्जेक्ट (इसे आरेख कहते हैं), जिसमें कई पैरामीटर शामिल हैं। प्रत्येक पैरामीटर (पैरामीटर वर्ग) कई प्रकारों में से एक हो सकता है: int, double, complex, string - कुछ नाम।टेम्पलेट सदस्य चर के साथ सी ++ कक्षा
तो मेरा पहला वृत्ति मेरे आरेख वर्ग को टेम्पलेट पैरामीटर के वेक्टर के रूप में परिभाषित करना था, जो इस तरह दिखेगा।
class Diagram
{
private:
std::vector<Parameter<T> > v;
};
यह संकलित नहीं होता है, और मैं समझता हूं क्यों। तो, यह पेज How to declare data members that are objects of any type in a class पर सिफारिशों के आधार पर, मैं अपने कोड को संशोधित तरह देखने के लिए:
class ParameterBase
{
public:
virtual void setValue() = 0;
virtual ~ParameterBase() { }
};
template <typename T>
class Parameter : public ParameterBase
{
public:
void setValue() // I want this to be
// void setValue(const T & val)
{
// I want this to be
// value = val;
}
private:
T value;
};
class Diagram
{
public:
std::vector<ParameterBase *> v;
int type;
};
मैं मुसीबत पता लगाना कैसे एक उपयुक्त टेम्प्लेट पैरामीटर के साथ setValue समारोह कॉल करने के लिए हो रही है। पैरामीटरबेस सार सारणी कक्षा में एक टेम्पलेटेड पैरामीटर होना संभव नहीं है। कोई भी मदद बहुत ही सराहनीय होगी।
पीएस मेरे पास boost :: किसी भी का उपयोग करने के लिए लचीलापन नहीं है।
आप वस्तुतः, किसी भी मूल्य के लिए पैरामीटर सेट नहीं कर सकते हैं या तो उचित 'पैरामीटर' प्रकार के कास्ट करने के लिए या वस्तु को हटाने और एक नया एक –
बनाने एक सेटर का उपयोग न करें, एक निर्माता का उपयोग करें, तो जरूरत है आप हमेशा 'v.push_back (नया पैरामीटर (मेरा)) कर सकते हैं;' –
क्यों न केवल उन्हें एक सामान्य प्रकार में परिवर्तित करें और आवश्यकता होने पर वापस परिवर्तित करें? इस तरह की चीजें आमतौर पर की जाती हैं। – KillianDS