自动拆分(重构).h到标头和实现(h + cpp)

时间:2012-06-25 06:28:38

标签: c++ refactoring header-files automated-refactoring

编写C ++代码时,我经常首先在头文件中编写完整的“实现”代码,然后再将实现重构为.cpp文件。

这很好,但我发现这个过程费力,但其他方面很容易,所以我想知道是否有任何自动化方法可以做到这一点?

具体来说,我想将.h中的所有类和函数定义转换为声明,并将它们声明为新的.cpp文件。

我正在使用xcode,但我对任何解决方案持开放态度。

4 个答案:

答案 0 :(得分:9)

Lazy C++只能编写一个.lzz文件,它会为你生成.h和.cpp。

我真的很期待C++ modules你只写.cpp并自动生成导入文件。但即使 Clang 已经开始实施模块,我们也要等待几年。 Here是一些例子。

答案 1 :(得分:1)

您可以使用Makeheaders等工具

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

但一般情况下,这些工具并不完整,特别是会遇到新的c ++ 11文件。

答案 2 :(得分:1)

您可能也对Eclipse的函数“Refactor / Toggle function”感兴趣。然而,它并不总是正常工作。

答案 3 :(得分:0)

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使用而没有{{1} }

所以基本上clang是工具,因此解析是完美的。