यहां यह जाता है: मैं एक शून्य कार्य बनाना चाहता हूं जो दो प्रसिद्ध प्रकार के मान प्राप्त करेगी और दूसरा ऐसा कुछ भी हो सकता है। कोड इस तरह होगा:सी ++ किसी फ़ंक्शन में किसी भी प्रकार का तर्क भेजें
void change_settings(string element, short setting, ??? value) {
switch (setting) {
case ST_NAME:
// Cast value to string or char* and change element.name
break;
case ST_AMOUNT:
// Cast value to integer and change element.amount
break;
case ST_ENABLED:
// Cast value to boolean and change element.enabled
break;
}
}
मैं मान का प्रकार const void*
बनाने के लिए tryied लेकिन मुझे एक त्रुटि (cast from ‘const void*’ to ‘short int’ loses precision
) मिलता है क्योंकि मैं तो बस ऐसा किया: short name = (short)value
, जो कुछ पागल हताश परीक्षण होना चाहिए, भाग्यशाली होने की उम्मीद । अब, मुझे नहीं पता कि ऐसा करने का कोई तरीका है या नहीं, किसी भी प्रकार के चर के पॉइंटर को पास करें और फिर इसे परिवर्तित करें (मुझे पता है कि प्रत्येक मामले के आधार पर उम्मीद करने के लिए चर का प्रकार पता है। मैं यह कैसे करूँगा ?!
void change_settings(const std::string& element, short setting, const std::string& value);
void change_settings(const std::string& element, short setting, int value);
void change_settings(const std::string& element, short setting, bool value);
इस को हटा देता है: धन्यवाद
यही सच है, लेकिन उस समय क्यों प्रत्येक सेटिंग के लिए एक अलग समारोह नहीं बना सकते हैं और स्विच मामले से बचने में उपयोग करना चाहिए। – Caesar
हाँ - यह 'सेटिंग' चर अनावश्यक बनाता है। –
आइए इसे आज़माएं। बेशक, मैं अभी भी स्विच और सेटिंग का उपयोग कर सकता हूं यदि मेरे पास अलग-अलग मामले हैं जहां मुझे एक int मान की आवश्यकता है, उदाहरण के लिए – ali