2010-08-17 126 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