मेरे पास कुछ स्ट्रिंग-जैसी कक्षाएं हैं जिन्हें स्पष्ट रूप से स्ट्रिंग में परिवर्तित किया जा सकता है। मेरे पास इनके लिए कुछ उपयोग हैं;सी ++ स्ट्रिंग-जैसी कक्षा निहित रूपांतरण के साथ
class TranslatableString
{
public:
explicit TranslatableString(const char *s) : native_text_(s) {}
operator const char *() const { return gettext(native_text_); }
// Or not - see below:
operator const std::string() const { return gettext(native_text_); }
private:
const char * const native_text_;
};
अब मैं एक स्ट्रिंग शाब्दिक की तरह के रूप में ज्यादा का उपयोग कर यह होना चाहिए, इस वर्ग यथासंभव सरल (यानी का उपयोग कर बनाने के लिए कोशिश कर रहा हूँ: एक उदाहरण पाठ gettext द्वारा कार्यावधि में अनुवाद करने की आवश्यकता है कि पकड़ करने के लिए है यथासंभव)। विशेष रूप से, मैं निम्न नमूना उपयोगों के दोनों काम करने के लिए करना चाहते हैं:
const TranslatableString HELLO = TranslatableString("Hello, world!");
std::string ExampleA() {
return HELLO;
}
void ExampleB() {
std::string s;
s = HELLO;
}
दोनों उदाहरण काम करने के लिए कोई तरीका है?
- अगर मैं
operator std::string
में शामिल हैं, तो ExampleB संकलित करने के लिए कह रही हैstd::string::operator=(const char *)
औरstd::string operator=(const std::string&)
(जो समझ में आता है) के बीच एक अस्पष्टता नहीं है कि विफल रहता है,। - यदि मुझे
operator std::string
शामिल नहीं है, तो exampleA संकलित करने में विफल रहता है; स्पष्ट रूप से स्पष्ट रूप से एक अनुवादक स्ट्रिंग को कॉन्स्ट चार से * std :: स्ट्रिंग में परिवर्तित करने की अनुमति नहीं है, हालांकि मुझे सी ++ के निहित रूपांतरण नियमों को समझाने के लिए पर्याप्त रूप से समझ में नहीं आता है।
समझ में आता है। धन्यवाद। (यह विशेष वर्ग केवल स्ट्रिंग अक्षर के साथ प्रयोग करने के लिए डिज़ाइन किया गया है, इसलिए 'कॉन्स्ट char *' ठीक है; कहीं और, मैं लगभग हमेशा 'std :: string' का उपयोग करता हूं।) –