我一直在尝试通过 boost 来了解 iostreams 库。
但我不能真正完全掌握这些概念。
假设我有以下课程:
伪代码:以下代码仅用于说明问题。
编辑:删除了读取的代码,因为它消除了对真正问题的关注。
class my_source {
public:
my_source():value(0x1234) {}
typedef char char_type;
typedef source_tag category;
std::streamsize read(char* s, std::streamsize n)
{
... read into "s" ...
}
private:
/* Other members */
};
现在说我想将 this 流式传输到 int。
我需要做什么 ?我试过以下
boost::iostreams::stream<my_source> stream;
stream.open(my_source());
int i = 0;
stream >> i;
// stream.fail() == true; <-- ??
这导致失败,(设置了失败位)
虽然以下工作正常。
boost::iostreams::stream<my_source> stream;
stream.open(my_source());
char i[4];
stream >> i;
// stream.fail() == false;
有人可以向我解释为什么会这样吗?这是因为我设置了char_type char 吗?
我真的无法在任何地方找到一个好的解释。我一直在尝试阅读文档,但如果这是问题,我找不到 char_type 的定义行为。当我使用字符串流时,我可以读入一个 int 而无需做任何特别的事情。
所以如果有人有任何见解,请赐教。