Автоматически разделяет (рефакторинг) .h на заголовок и реализацию (h+cpp)

При написании кода на C++ я часто начинаю с написания полного кода "реализации" в моих заголовочных файлах, а затем мне нужно реорганизовать реализацию в файл.cpp.

Это замечательно, но я считаю этот процесс трудоемким, но в остальном довольно легким, поэтому я подумал: а есть ли какой-нибудь автоматизированный способ сделать это?

В частности, я хочу преобразовать все определения классов и функций в .h декларации, и пусть они будут объявлены в новом .cpp файл.

Я использую xcode, но я открыт для любых решений.

3 ответа

Решение

Существует Lazy C++, где вы пишете только один файл.lzz, и он генерирует.h и.cpp для вас.

Я действительно с нетерпением жду модулей C++, где вы пишете только.cpp, а файл импорта генерируется автоматически. Но нам придется подождать несколько лет, хотя Clang начал внедрять модули. Вот несколько примеров.

Вас также может заинтересовать функция Eclipse "Refactor/Toggle function". Однако это не всегда работает должным образом.

Вы можете использовать некоторые инструменты, такие как Makeheaders

http://www.hwaci.com/sw/mkhdr/

но в целом эти инструменты не являются полными, особенно в новых файлах C++11.

Модули C++20, по сути, делают это за нас

Как упоминалось по адресу: https://quuxplusone.github.io/blog/2019/11/07/modular-hello-world/ clang 2019-11 реализует его вместе:

clang++ -std=c++2a -c helloworld.cpp -Xclang -emit-module-interface -o helloworld.pcm
clang++ -std=c++2a -c -fprebuilt-module-path=. -o helloworld.o helloworld.cpp
clang++ -std=c++2a -fprebuilt-module-path=. -o main.out main.cpp helloworld.o

где:

  • helloworld.cpp содержит реализацию
  • helloworld.pcm это предварительно скомпилированный модуль, в основном автоматически извлеченный заголовок из .cpp (но в формате внутреннего языка clang), который используется main.cpp без .hpp

Так что в основном clang - это инструмент, и поэтому синтаксический анализ идеален.

Другие вопросы по тегам