Ho problemi nell'implementare il mio stringbuf personalizzato e stringstream utilizzando char16_t come tipo di carattere. Come test ho usato un nullstringbuf e un nullstringstream che ho trovato in un vecchio, e forse obsoleto manuale C++. Questo nullstringstream agisce come "/ dev/null" ed è una semplice implementazione.
Questo semplice nullstream funziona quando utilizzo <char>
ma non riesce con un'eccezione std :: bad_cast quando utilizzo <char16_t>
. So che ci deve essere un char_traits<char16_t>
disponibile ma libC++ sembra averlo presente.Xcode 4.5.2 libC++ std :: bad_cast durante l'implementazione del flusso personalizzato (stringa)
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!
};
per farlo compilato Ho anche bisogno di specializzarsi std::ctype<char16_t>
.
Le mie domande ?:
- Ho bisogno di implementare o specializzarsi, oltre std :: ctype/std :: basic_stringbuf/std :: basic_stringstream, non più di classi o modelli?
- Qualcun altro ha gli stessi problemi utilizzando libC++, char16_t e iostreams?
Grazie per qualsiasi aiuto.