भिन्न हैं मैंने इस बारे में SO पर अन्य प्रश्नों को देखा है, लेकिन कोई भी जो इसे पूरी तरह से समझाता है। सही कंपेलरों के लिए नीचे दी गई दो स्थितियों को संभालने के तरीके क्या हैं? मैं जीसीसी 4.7.1 (साथ -std = C++ 0x), VS2010 और VS2012 के साथ यह कोशिश की है एक सब पर अलग अलग परिणाम प्राप्त:रूपांतरण ऑपरेटर अतिसंवेदनशीलता अधिभार, कंपाइलर
उदाहरण 1:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = b;
}
आउटपुट:
- जीसीसी 4.7.1: ठीक है
- VS2010: ठीक है
- VS2012: विफल: " स्ट्रिंग के लिए बी बी से कनवर्ट नहीं कर सकता"
उदाहरण 2:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = (string)b;
आउटपुट:
- जीसीसी 4.7.1: विफल: (बी बी &) अतिभारित स्ट्रिंग की कॉल ambigious
- VS2010 है: ठीक है
- वीएस2012: विफल: "बीबी से स्ट्रिंग में कनवर्ट नहीं किया जा सकता"
मैं सामान्य रूपांतरण का उपयोग करता हूं क्योंकि मैं कुछ समान रूप से बढ़ावा देता हूं :: किसी भी, लेकिन शायद एक बेहतर तरीका है। इसे उत्तर के रूप में चिह्नित किया जाएगा mksvetkov काफी समान था – Rolle