2009-09-10 87 views
25

我有一堆C++头文件与各种类和函数声明。到目前为止,当我已经写声明的类和函数的C++源文件实现中,我已手动一直:从头自动生成C++文件?

  1. 复制从头文件中的声明,以相应的源文件。
  2. 删除“class classname {”和匹配的“};”
  3. 将“classname ::”添加到所有类函数的名称中。
  4. 使用“{}”替换函数声明后面的分号。
  5. 删除关键字“虚拟”和“静态”。

只有在所有那些没有做任何事情的工作之后,我才能真正去实现这些功能。我想知道是否有一个工具可以从某个地方自动生成一个“.cpp”文件,该文件由“.h”文件生成,其中生成的“.cpp”包含用于“.h”文件中声明的函数的空存根(并没有给出内联定义)。一个UNIX友好的命令行工具将是首选。谢谢。

更新:跨平台工具将是理想的。如果没有,我正在使用Mac OS X 10.6。

回答

21

Lazy C++似乎旨在解决这个问题。

+0

Lazy C++似乎不能在Mac OS X上安装......这正是我所使用的。是否有任何跨平台的生成器可以从源代码轻松构建? – 2009-09-10 11:07:43

+1

+1非常有趣的资源。 – 2009-09-10 11:09:29

+1

@Michael:您可以获取OSX的源代码和交叉编译,请参阅回答http:// stackoverflow。com/questions/1375201/lazy-c-chicken-and-egg-problem – moonshadow 2009-09-10 11:12:23

3

eclipse CDT有一个“实施方法”功能,它只是(一次一个方法)。还有一个“Generate Getters and Setters”功能,它也可以在函数体中生成相应的代码。

+0

谢谢。我正在寻找一个命令行调用,尽管......我可以在一个“find”命令中使用的东西递归地为我的项目中的所有头文件生成“.cpp”文件。 – 2009-09-10 21:48:52

5

最近我发现自己处于你的处境,并且准备写我自己的工具 - impl_me。这是一个小的Ruby脚本,它使用SWIG作为解析器后端。它写入标准输出,以便您可以结合您最喜爱的nix工具集find/grep/sed/awk来调整您的偏好。

因为它是用Ruby编写的,所以它应该是跨平台的。 SWIG也是跨平台的,所以一切都应该没问题。

在这个阶段它是相当原始的,在解析奇怪的模板和东西方面并不像Lazy C++那样强大。欢迎贡献:)

0

我试过惰性C++,但它似乎已过时,不再维护。它也不支持最新的C++ 14标准。

这就是为什么我决定用Java编写我自己的工具使用ANTLR4。这就是所谓的分数,你可以在这里找到它:https://github.com/underrated/Score

目前它处于起步阶段,可能是充满了错误,但我打算改善它。因此,如果你想要尝试一下,并报告项目的github页面上的任何错误。我会尽可能快地修复它们。

+0

我不指望它现在处理预处理器条件,但我打算为此添加支持。除此之外,该工具不打算对代码进行语义检查。它只是标识方法实现,然后将方法原型放在源文件的头文件和方法实现中(再加上几个“分离”)。开发人员应确保代码的正确性(例如,使用IDE)。如果原始代码有语法/语义错误,那么生成的代码也会如此。但是可以通过IDE或编译器找到它们。 – 2016-08-09 09:35:37

+0

@IraBaxter为什么你需要在迈克尔问题的背景下处理这样复杂的事情?他所需要的只是自动化一些代码的复制/粘贴/修改。 #ifdefs的特殊处理确实是必要的。模板不需要被触摸,他们可以留在标题中。宏调用将被解析器视为简单的标识符或函数调用,并且不需要被触摸。关于命名空间,所有“using ...”语句都可以保留在标题中。并且“名称空间... {...}”可以复制到头文件和源文件中。我错过了什么吗? – 2016-08-09 13:51:26