Подтвердить что ты не робот

Почему современные С++ IDE не могут автоматически генерировать файлы заголовков?

Я понимаю преимущества и гибкость, которые предоставляют файлы заголовков, обнаружение символов, ускорение обработки для компилятора и т.д. То, что я не понимаю, - это то, почему современные С++ IDE не автоматически генерируют заголовочные файлы на основе элементы/методы, добавленные в файл кода, таким образом уменьшая ручной труд, связанный с тем, чтобы заголовок был обновлен с помощью файла кода и наоборот. Поскольку среда IDE вносит только инкрементные изменения в файл заголовка, разработчики могут изменять заголовок, и изменения сохраняются.

Рефакторинг может быть предоставлен для добавления/переименования/удаления аргументов метода, для методов переименования, для перемещения методов в другой класс и т.д. Во время такого рефакторинга IDE позаботится об обновлении заголовка + исходных файлов.

Функциональность может быть похожа на Visual Form Designer в Visual Studio. Когда вы создаете форму, IDE автоматически генерирует код для того же самого, который хранится в отдельном исходном файле, управляемом IDE. Devs также может изменять такие файлы кода или может включать дополнительный код в исходный файл, управляемый пользователем.

Работая с профессиональным исходным кодом на С++, я столкнулся со всеми видами сомнительных практик:

  • Целые классы, определенные в файле заголовка, содержащие код функции ( "почему я должен определять класс в двух местах, когда я могу определить его в одном?!" )

  • Полезные функции, определенные в файле заголовка ( "зачем беспокоиться об обновлении заголовка, когда я могу определить функцию в самом заголовке?", пусть другие разработчики используют "перейти к объявлению", чтобы найти если они не думают искать в файле заголовка! ")

  • Отсутствуют определения заголовков для общедоступных/статических функций (сокращает время компиляции? или экономит время разработки?)

Хотя я не профессиональный программист на С++, исходящий из высокоуровневого фона (JS, С#, AS3), я чувствую, что "downgrade" работает с С++ из первых рук, и я не понимаю, почему некоторые из этих недостатки не могут быть устранены самой IDE.

Ни в коем случае я не издеваюсь над IDE или компилятором. Я понимаю, что С++ позволяет более сложные методы определения программы, чем современные языки (например, С#), и хотя сложность шаблонов ускользает от меня, я хотел бы увидеть некоторые преимущества языков более высокого уровня, внесенных в С++ разработка приложений.

4b9b3361

Ответ 1

Предпосылка вашего вопроса, я считаю, неверна.

Eclipse Luna IDE может автоматически генерировать объекты реализации (в файле CPP) после определения функции (или функции члена класса) в файле заголовка.

В заголовке введите следующее:

class MyClass 
{
  void my_method(const OtherClass& o, const std::string& name) const;
};

Затем нажмите "Источник > Метод внедрения". Eclipse правильно генерирует что-то подобное в файле CPP:

void MyClass::my_method(const OtherClass& o, const std::string& name) const
{
   // TODO: Auto-generated method stub.
}

Я думаю, что это более типичный случай использования, чем "[добавление] элементов/методов... в файл кода", а затем "auto-generat [ing] заголовочные файлы". Идея заключается в том, что большинство разработчиков будут создавать (создавать) интерфейс, а затем разрабатывать реализацию (иногда в CPP файле).

Что касается "Полезных функций, определенных в файле заголовка", это обычная практика, когда разработчики хотят, чтобы их функции были встроены компилятором во многих единицах перевода.