D>Передавать параметры открытия конструктору, это привычка кодирования в стиле Си, объясните зачем передавать в конструктор или еще куда либо константы известные на этапе компиляции ?
Такое "модное" кодирование заставит все функции сделать шаблонными. Приведёт это к непомерной нагрузке на компилятор — более-менее сложный проект будет собираться часами.
D>Константы должны появится только один раз, в том месте где без них не обойтись, а проталкивать их по стеку не могу найти причину.
В случае шаблонного и не-шаблонного класса для вызова конструктора файла компилятор сгенерит одинаковый код (имею в виду вариант когда вызов конструктора будет инлайнится).
D>По отношению к файлу имеется ограниченный набор флагов для его открытия, читая Александреску раскладываем все варианты на стратегии и параметризуем ими шаблон. Указывая в параметрах функции что этот файл должен быть FileOpening::OpenExisting уже по объявлению легче определить что функция делает с файлом, она создает, удаляет или модифицирует существующий файл, весьма удобно.
Не стану оспаривать заслуги Александреску, но не стоит воспринимать всё им написанное как прямое руководство к действию. Книги его скорее дают представление о возможностях С++, чем являются практическим руководством. И уж тем более не стоит городить сложных решений там, где замечательно работают простые.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>