मुझे चार प्रकार के रूप में char16_t का उपयोग करके अपने स्वयं के कस्टम स्ट्रिंगबफ और स्ट्रिंगस्ट्रीम को लागू करने में समस्याएं आ रही हैं। परीक्षण के रूप में मैंने एक nullstringbuf और nullstringstream का उपयोग किया जो मैंने पुराने में पाया, और शायद दिनांकित C++ मैन्युअल। यह nullstringstream "/ dev/null" के रूप में कार्य करता है और यह एक सरल कार्यान्वयन है।
यह सरल नलस्ट्रीम काम कर रहा है जब मैं <char>
का उपयोग करता हूं लेकिन <char16_t>
का उपयोग करते समय std :: bad_cast अपवाद के साथ विफल रहता है। मुझे पता है कि char_traits<char16_t>
उपलब्ध होना चाहिए लेकिन libC++ ऐसा प्रतीत होता है।एक्सकोड 4.5.2 libC++ std :: bad_cast कस्टम (स्ट्रिंग) स्ट्रीम को लागू करते समय
class nullstringbuf : public std::basic_stringbuf<char16_t>
{
public:
nullstringbuf()
{
setp(0,0);
setg(0,0,0);
}
virtual ~nullstringbuf()
{
}
virtual int_type underflow()
{
setg(0,0,0);
return traits_type::eof();
}
virtual int overflow(int c)
{
setp(0,0);
if (c==traits_type::eof())
return 0;
return c;
}
};
class nullstringstream : virtual public std::basic_stringstream<char16_t>
{
public:
// Constructor(s)
nullstringstream(std::ios_base::openmode om = std::ios_base::out | std::ios_base::in)
: std::basic_stringstream<char16_t>(om)
{
init(&m_StreamBuf);
}
nullstringstream(base::xstring const& val, std::ios_base::openmode om = std::ios_base::out | std::ios_base::in)
: std::basic_stringstream<char16_t>(val, om)
{
init(&m_StreamBuf);
}
// Destructor
virtual ~nullstringstream()
{
}
nullstringbuf* rdbuf()
{
return &m_StreamBuf;
}
std::basic_string<char16_t> str() const
{
return m_StreamBuf.str();
}
private:
nullstringbuf m_StreamBuf;
nullstringstream(nullstringstream const &); // do NOT implement!
nullstringstream& operator=(nullstringstream const &); // do NOT implement!
};
यह संकलित करने के लिए मैं भी std::ctype<char16_t>
विशेषज्ञ की जरूरत है।
मेरे सवालों का ?:
- मैं लागू करने या विशेषज्ञ, अलावा करने की आवश्यकता है std :: CTYPE/std :: basic_stringbuf/std :: basic_stringstream, किसी भी अधिक वर्ग या टेम्पलेट्स?
- क्या कोई और libC++, char16_t और iostreams का उपयोग कर एक ही समस्या है?
किसी भी मदद के लिए धन्यवाद।