[英]Xcode 4.5.2 libc++ std::bad_cast when implementing custom (string)stream
我在使用char16_t作為char類型實現我自己的自定義stringbuf和stringstream時遇到問題。 作為測試,我使用了nullstringbuf和nullstringstream,我在舊的,可能是過時的C ++手冊中找到了。 此nullstringstream充當“/ dev / null”並且是一個簡單的實現。
當我使用<char>
時,這個簡單的null流正在工作,但是當我使用<char16_t>
時,它失敗並帶有std :: bad_cast異常。 我知道必須有一個char_traits<char16_t>
可用,但libc ++似乎有它存在。
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>
。
我的問題?:
謝謝你的幫助。
使用不太容易支持的流類型實例化IOStream需要的不僅僅是實例化它並提供std::char_traits<cT>
。 至少你還需要實例化一些方面:
std::ctype<cT>
雖然不一定在許多上下文中使用。 std::numpunct<cT>
。 std::num_get<cT>
。 std::num_put<cT>
。 std::codecvt<cT, char>
。 副手我認為這些是你需要的方面。 但是,我記得我需要做的事情比我認為必要的更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.