我正在制作一个大量使用
>>
对象的 std::ifstream
运算符的解释器。是否可以按照下面指定的代码行做一些事情:
#include <fstream>
int main() {
std::ifstream ifstream = std::ifstream();
ifstream.open("textfile.txt");
char c = '\0';
ifstream >> c
if (c != '{') {
// do something to ifstream object that makes ifstream.good() return false
// Even when it read a character successfully
// Reason: c != '{'
}
ifstream.close();
}
我想这样做的原因是因为我覆盖了很多对象的
>>
运算符,并且希望在解释器遇到不应该遇到的事情时得到通知,比如文件格式中的语法错误。
作为参考,这是重载运算符的样子:
std::ifstream& operator >> (std::ifstream& ifstream, SomeObject& someObject) {
// Interpret data
// Make ifsteeam.good() return false if syntax error found
}
如您所见,我无法返回
bool
值。如果我不能手动让ifstream.good()
返回false
,是否有替代和可行的解决方案?我需要这个来让我的代码的其他部分知道在使用那个ifstream
对象时不应该再阅读。
setstate
:
std::ifstream& operator >> (std::ifstream& ifstream, SomeObject& someObject) {
// process stuff
if (something_failed) {
ifstream.setstate(std::ios::failbit);
}
return ifstream;
}