Я понимаю преимущества и гибкость, которые предоставляют файлы заголовков, обнаружение символов, ускорение обработки для компилятора и т.д. То, что я не понимаю, - это то, почему современные С++ IDE не автоматически генерируют заголовочные файлы на основе элементы/методы, добавленные в файл кода, таким образом уменьшая ручной труд, связанный с тем, чтобы заголовок был обновлен с помощью файла кода и наоборот. Поскольку среда IDE вносит только инкрементные изменения в файл заголовка, разработчики могут изменять заголовок, и изменения сохраняются.
Рефакторинг может быть предоставлен для добавления/переименования/удаления аргументов метода, для методов переименования, для перемещения методов в другой класс и т.д. Во время такого рефакторинга IDE позаботится об обновлении заголовка + исходных файлов.
Функциональность может быть похожа на Visual Form Designer в Visual Studio. Когда вы создаете форму, IDE автоматически генерирует код для того же самого, который хранится в отдельном исходном файле, управляемом IDE. Devs также может изменять такие файлы кода или может включать дополнительный код в исходный файл, управляемый пользователем.
Работая с профессиональным исходным кодом на С++, я столкнулся со всеми видами сомнительных практик:
-
Целые классы, определенные в файле заголовка, содержащие код функции ( "почему я должен определять класс в двух местах, когда я могу определить его в одном?!" )
-
Полезные функции, определенные в файле заголовка ( "зачем беспокоиться об обновлении заголовка, когда я могу определить функцию в самом заголовке?", пусть другие разработчики используют "перейти к объявлению", чтобы найти если они не думают искать в файле заголовка! ")
-
Отсутствуют определения заголовков для общедоступных/статических функций (сокращает время компиляции? или экономит время разработки?)
Хотя я не профессиональный программист на С++, исходящий из высокоуровневого фона (JS, С#, AS3), я чувствую, что "downgrade" работает с С++ из первых рук, и я не понимаю, почему некоторые из этих недостатки не могут быть устранены самой IDE.
Ни в коем случае я не издеваюсь над IDE или компилятором. Я понимаю, что С++ позволяет более сложные методы определения программы, чем современные языки (например, С#), и хотя сложность шаблонов ускользает от меня, я хотел бы увидеть некоторые преимущества языков более высокого уровня, внесенных в С++ разработка приложений.