Automatically split (refactor) .h into header and implementation (h+cpp)

若如初见. 提交于 2020-06-08 03:41:26

问题


When writing C++ code, I often start by writing full 'implementation' code in my header files, then later need to refactor the implementation into a .cpp file.

This is great, but I find this process laborious, but otherwise pretty easy, so I wondered about whether is there any automated way to do this?

Specifically, I want to convert all class and function definitions in the .h to declarations, and have them declared in a new .cpp file.

I'm using xcode, but I am open to any solutions.


回答1:


There is Lazy C++ where you only write one .lzz file and it generates .h and .cpp for you.

I am really looking forward for C++ modules where you only write .cpp and the import file is generated automatically. But we will have to wait for a few years even though Clang has started to implement modules. Here are some examples.




回答2:


You can use some tools such as Makeheaders

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

but in general, these tools are not complete, especially meeting new c++11 files.




回答3:


You may be also interested in Eclipse's function "Refactor/Toggle function". It not always work properly however.




回答4:


C++20 modules essentially do that for us

As mentioned at: https://quuxplusone.github.io/blog/2019/11/07/modular-hello-world/ clang 2019-11 implements it along:

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

where:

  • helloworld.cpp contains the implementation
  • helloworld.pcm is a precompiled module, basically an auto-extracted header from the .cpp (but in a clang internal language format) which gets used by main.cpp without an .hpp

So basically clang is the tool, and thus parsing is perfect.



来源:https://stackoverflow.com/questions/11184366/automatically-split-refactor-h-into-header-and-implementation-hcpp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!