Вот сделка:
public static Message CreateMessage(
MessageVersion version,
MessageFault fault,
string action)
action : Описание того, как сообщение должно быть обработано.
Что вы, ребята, добавили туда? « Обращаться с осторожностью !!! » или « не собираюсь работать на чина. Я мог бы переработать функцию, чтобы найти определенную фразу (например, «#End of Stream #» или что-то в этом роде), но я думаю, что это плохая идея, если поток файлов, который я передаю, содержит именно эту фразу.
Я думал, что используйте перегрузку функций, но до сих пор книга упоминала, когда она хочет, чтобы я это сделал. Вероятно, я прилагаю слишком много усилий для решения этой одной проблемы, но мне нравится творческий процесс, и мне любопытно, есть ли такой способ сделать это без перегрузки.
eof()
действительно работает для cin. Вы делаете что-то не так; пожалуйста, опубликуйте свой код. Одним из распространенных камней преткновения является то, что флаг eof
устанавливается после, когда вы пытаетесь прочитать за концом потока.
Вот демонстрация:
#include <iostream>
#include <string>
int main( int, char*[] )
{
std::string s;
for ( unsigned n = 0; n < 5; ++n )
{
bool before = std::cin.eof();
std::cin >> s;
bool after = std::cin.eof();
std::cout << int(before) << " " << int(after) << " " << s << std::endl;
}
return 0;
}
и ее вывод:
D:>t
aaaaa
0 0 aaaaa
bbbbb
0 0 bbbbb
^Z
0 1 bbbbb
1 1 bbbbb
1 1 bbbbb
(EOF можно сгенерировать с помощью Ctrl-Z в Windows и Ctrl-D во многих других ОС)
Почему std::cin.eof()
не работает? cin
будет сигнализировать EOF при закрытии stdin, что произойдет, когда пользователь сообщит об этом с помощью Ctrl+d (*nix) или Ctrl+z (Windows), или (в случае конвейерного входного потока), когда конвейерный файл заканчивается