修改生成的代码

时间:2010-08-17 17:08:46

标签: language-agnostic code-generation swig

我正在使用SWIG在PHP中包装C ++库,并且在某些情况下我想修改生成的代码(生成的C ++和PHP):

  • 修复代码生成错误
  • 添加在PHP中有意义但在C ++中没有意义的代码(例如,类型检查)
  • 添加文档标签(例如phpDoc)

我目前正在使用patch自动执行这些修改。这种方法有效,但似乎高度维护和脆弱。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:1)

你最后可能会遇到维护噩梦。您可以考虑使用另一种生成方法来代替SWIG:

  • 让您直接在模型上添加自定义代码(这样您不需要在后代添加它)
  • 让您定义自己的生成器。仅此功能就可以不需要一直添加自定义代码。

使用第三方生成器的问题在于它们永远不会真正生成您想要的内容。编写自己的代码生成器的问题在于它的工作量要大得多。你选择。

但是用其他自动化纠正自动化......

答案 1 :(得分:1)

代码生成是一个相当广泛的主题,并且肯定还有许多其他方法,如上所述,这些方法对您来说可能更具吸引力。 但是,如果您不想使用其他工具,则根据生成的代码和PHP OO功能,您可以使用Generation Gap pattern

答案 2 :(得分:1)

最好的办法是让您的代码生成器根据您的需要生成正确的代码。手动调整生成的输出是不可持续的。只要输入发生变化,您就必须再次调整它。

如果某个工具产生扁平错误的输出,则理想的是修复它并将补丁提交给维护者。如果输出在某些情况下是正确的,但对您而言是错误的,我建议添加一个选项,将行为更改为您需要的内容。

有时,您可以使用一个简短的程序来自动执行修补生成代码的智能工作,这样您就不需要手动处理来制作补丁。

或者,您可以编写自己的代码生成器,但我怀疑这比您想要的工作多得多。这也取决于你在做什么。有时代码生成实际上只是宏扩展,并且在野外有很多好的工具。

祝你好运!