ИМХО, использование умного итератора - путь. Что нужно сделать, это иметь стек входных контекстов, поддерживаемых итератором. Каждый входной контекст хранит информацию, относящуюся к конкретному файлу.
Всякий раз, когда необходимо прочитать новый файл (т.е. после просмотра оператора #include
), создается новый входной контекст. Текущий входной контекст помещается в стек, в то время как новый контекст становится активным. В EOF вы извлекаете следующий входной контекст из стека, возвращаясь к точке сразу после #include
. Если стек пуст, вы достигли EOF основного файла.
В любом случае, итератор получает данные только от активного входного контекста.