संपादित करें: माइक सेमुर की टिप्पणी के बाद, मैंने को operator char *() const;
के साथ बदल दिया और तदनुसार कार्यान्वयन को बदल दिया। यह अंतर्निहित कास्टिंग की अनुमति देता है, लेकिन, किसी कारण से, हस्ताक्षर किए गए लंबे int ऑपरेटर को char * ऑपरेटर पर प्राथमिकता है, जो कि सही नहीं लगता ... इसके अलावा, मैं अजीब सी सामान जैसे char * के बाहर खुलासा नहीं करना चाहता कक्षा, जब मेरे पास std :: स्ट्रिंग है। मेरे पास एक झुकाव है कि मेरी इच्छित फीचर को समर्थन देने के लिए मेरी कस्टमाइज्डइन्ट क्लास को कुछ सामानों से प्राप्त करने की आवश्यकता है। क्या कोई std::basic_string
के बारे में माइक की टिप्पणी विस्तृत कर सकता है? मुझे यकीन नहीं है कि मैं इसे ठीक से समझ गया।सी ++ लागू रूपांतरण ऑपरेटर प्राथमिकता
#include <string>
#include <sstream>
#include <iostream>
class CustomizedInt
{
private:
int data;
public:
CustomizedInt() : data(123)
{
}
operator unsigned long int() const;
operator std::string() const;
};
CustomizedInt::operator unsigned long int() const
{
std::cout << "Called operator unsigned long int; ";
unsigned long int output;
output = (unsigned long int)data;
return output;
}
CustomizedInt::operator std::string() const
{
std::cout << "Called operator std::string; ";
std::stringstream ss;
ss << this->data;
return ss.str();
}
int main()
{
CustomizedInt x;
std::cout << x << std::endl;
return 0;
}
कौन सा प्रिंट ", 123 कहा जाता है ऑपरेटर अहस्ताक्षरित लंबे int":
मैं कोड के इस टुकड़े की है। मेरे प्रश्न ये हैं:
- ऑपरेटर को हस्ताक्षरित लंबे int को हटाने के बाद, मुझे एक्स को std :: स्ट्रिंग को स्पष्ट रूप से क्यों डालना होगा? यह अंतर्निहित कास्ट ऑपरेटर (std :: string) को सीधे क्यों नहीं बुलाता है?
- क्या कोई दस्तावेज है जो बताता है कि कौन से निहित जानवरों की अनुमति है और उनका प्राथमिकता क्या है? ऐसा लगता है कि अगर मैं ऑपरेटर को बिना हस्ताक्षर किए गए लंबे int int के साथ एक ऑपरेटर हस्ताक्षरित int जोड़ता हूं, तो मुझे < < ऑपरेटर के लिए अस्पष्टता के बारे में एक कंपाइलर त्रुटि प्राप्त होती है ...
- इसके अलावा, मुझे पता है कि ऐसे ऑपरेटर को परिभाषित किया जा सकता है खराब अभ्यास, लेकिन मुझे यकीन नहीं है कि मैं संबंधित चेतावनी को पूरी तरह से समझता हूं। क्या कोई उन्हें रेखांकित कर सकता है? सार्वजनिक तरीकों को परिभाषित करने के लिए बेहतर अभ्यास करना होगा ToUnsignedLongInt और ToString?
यह संबंधित है: [स्ट्रिंग में अंतर्निहित रूपांतरण के माध्यम से ऑब्जेक्ट स्ट्रीम करते समय ओवरलोड रिज़ॉल्यूशन विफलता] (http://stackoverflow.com/questions/6677072/overload-resolution-failure-when-streaming-object-via-implicit-conversion -to-str) –
@Als: चलिए इसे धीरे-धीरे लेते हैं ... मैं अभी तक टेम्पलेट्स में गोता लगाने के लिए तैयार नहीं हूं :) –