Как следить за потоками в с ++ - PullRequest
1 голос
/ 20 ноября 2010

Часто при написании файловых пишущих или синтаксических анализаторов на c ++ я хотел бы следить за продвижением писателя / парсера по файлу при его записи / чтении. С этой целью я думал о реализации чего-то вроде:

ostream_monitor my_monitor(&my_output_stream, &cout);
my_monitor << my_variable;

Это приведет к выводу my_variable в my_output_stream, а также в cout, чтобы я мог это видеть.

Точно так же было бы неплохо иметь такую ​​же входную версию:

istream_monitor my_monitor(&my_input_stream, &cout);
my_monitor >> my_variable;

Это будет считывать следующий токен из my_input_stream и использовать его для установки my_variable, а также выводить любые прочитанные символы в cout, чтобы я мог видеть поток по мере его чтения.

Я мог бы пойти дальше и попытаться создать подклассы std :: istream и std :: ostream, которые делают это, но, похоже, потенциально много разработки для инструмента отладки может быть или не быть полезным. Поэтому мне предлагается спросить:

Что вы делаете, чтобы отслеживать прохождение парсера через файл? Мне интересно услышать любые решения, которые кажутся более простыми для реализации, чем приведенное выше.

1 Ответ

1 голос
/ 20 ноября 2010

Похоже на boost.IOStreams 'tee_device и, возможно, tee_filter, могут быть использованы для быстрой реализации того, что я описал выше: Как я могу составить выходные потоки, чтобы вывод шел сразу в нескольких местах?

...