2010-08-17 138 views
3

我使用SWIG包裹在PHP中的C++库,并出现了一些场合我想修改生成的代码(包括生成的C++和PHP):修改生成的代码

  • 修复代码生成错误
  • 添加代码是有道理的PHP,但不是在C++中(例如,类型检查)
  • 添加文档标签(例如PHPDoc的)

我目前自动化这些修改与patch。这种方法很有效,但看起来很高维护和脆弱。有没有更好的方法来做到这一点?

+0

在SWIG专家为您提供SWIG特定方式的情况下,标记为“swig”。 – 2010-08-17 17:10:44

回答

1

最好的选择是让您的代码生成器为您的需求生成正确的代码。手工调整生成的输出是不可持续的。每当输入发生变化时,您都必须再次调整它。

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

有时,您可以使用一个简短的程序自动完成修补生成的代码的智能工作,这样您就不需要手动过程来创建修补程序。

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

祝你好运!

+0

试试AtomWeaver。它可以让您轻松构建代码生成器。它基于ABSE,一种实用的模型驱动方法(因此不是UML/MDA)。因为它是一个基于模板的系统,非常简单,所以它可能适合OP的需求。 – 2010-08-20 15:16:47

1

稍后您可能最终会遇到维护噩梦。相反,痛饮你可以考虑使用另一种生成方法是:

  • 让你直接在模型上添加自定义代码(这样你就不需要添加这代后)
  • 让您定义拥有发电机。这一功能本身可能无需一直添加自定义代码。

使用第三方生成器的问题是,他们从来没有真正生成你想要的东西。编写自己的代码生成器的问题在于它的工作量更大。你选。

但修正与其他自动化自动化...

1

代码生成是一个相当广泛的话题,肯定有很多其他的方法,如上面提到的,这可能是更interresting给你。 但是,如果您不想使用其他工具,则取决于生成的代码和PHP OO功能,您可以使用Generation Gap pattern