我正在尝试使用以下代码从文件中读取数据。 (请注意,您需要在GCC上启用C ++ 11功能才能进行此编译。)
#include <fstream>
typedef unsigned char byte;
int main()
{
std::string filename = "test.cpp";
std::basic_ifstream<byte> in(filename, std::basic_ifstream<byte>::in | std::basic_ifstream<byte>::binary);
in.exceptions(std::ios::failbit | std::ios::badbit);
byte buf[5];
in.read(buf, 5);
return 0;
}
然而,在阅读数据时,我得到一个例外:
terminate called after throwing an instance of 'std::bad_cast' what(): std::bad_cast
调用in.read(buf, 5)
命令时会发生这种情况。
我知道我可以通过不设置我设置的异常掩码来抑制此异常,但这不能解决问题,它只会掩盖它。如果没有异常掩码,代码将继续工作,但会读取0个字符。
有谁知道为什么抛出此异常?我怎么让它消失?
答案 0 :(得分:3)
c ++ STL只包含两个char_traits特化:
struct char_traits < char >;
struct char_traits <wchar_t >;
对于发布的代码,需要char_traits<byte>
的定义。
答案 1 :(得分:2)
如果您将byte
重新定义为char
,bad_cast
例外将不再存在
发生。
我认为basic_ifstream
模板未完全调试
unsigned char
专业化。根据标准§27.3,
char_traits<CharType>
只需要由库实例化
CharType
= {char|char16_t|char32_t|wchar_t}