В настоящее время я пытаюсь перенести код из разбора файла с использованием FILE* в стиле C в istringstream в стиле C++. Моя программа работает параллельно, и я хотел бы 1) читать файл только на первом процессоре, 2) транслировать содержимое в строковой форме на все остальные процессоры и 3) чтобы каждый процессор анализировал строку.
Старая версия парсера по существу делает следующее:
while (!done) {
int c = fgetc(infile);
if (EOF == c) {
if (ferror(infile)) {
// throw some error
}
return;
}
// continue parsing
}
infile — это ФАЙЛ*. Моя попытка преобразовать код теперь выглядит следующим образом:
while (!done) {
char cchar = iss.get(); int c = int(cchar);
if (EOF == c) {
if ((iss.rdstate() & ifstream::failbit ) != 0 ) {
// throw some error
}
return;
}
// continue parsing
}
iss — это istringstream. Проблема в том, что в настоящее время ошибка всегда выдается в версии C++ при достижении EOF. Так что у меня нет правильного аналога ferror. Может ли кто-нибудь помочь мне с этим?
Себастьян
char cchar = iss.get(); int c = int(cchar);
никогда не может устанавливатьc
вEOF
, в зависимости от подписиchar
. - person Fred Foo   schedule 04.05.2011EOF
- но, возможно, это не пуленепробиваемо. Означает ли это, что я могу заменитьif (EOF==c)
наif (iss.eof())
и вообще пропустить второй тест, чтобы добиться того же, что и в C-версии? - person steigers   schedule 04.05.2011