是否有任何問題可能導致MS的T4模板代碼生成系統不適合生成C++代碼?T4模板 - 適合生成C++代碼?
回答
它可以生成你想要的任何文本,包括C++代碼。
有點冗長的答案了,我認爲有些人可能會覺得很有意思
我會說T4是極好的生成C++與
也許有人會反駁說,C++已經有工具來做元編程與像:
預編譯
使用預處理和高階宏就可以實現somewha噸什麼,你可以用T4做,但我說有T4的一些非常有說服力的好處:
- 從T4生成的代碼是很容易調試和理解
- 元編程與T4比與預處理簡單。預處理器可以這樣做最大/最小宏很容易,但是當我們談論模型驅動的模板,它變得難以
- T4是更強大的比預處理器使它更容易開發模板
- T4可以作爲的一部分來執行建設過程中或按需
模板偏特
我不喜歡模板偏特招數,但我從沒有每個人都喜歡保持他們的經驗發言。
我一直努力減少代碼冗餘,努力提高可維護性。另外,如果可能的話,我更喜歡編譯時錯誤超過運行時錯誤。所以在閱讀Andrei Alexandrescu的Modern C++後,我想我找到了答案。
我寫了一本受這本書影響很大的組件,然後我去度假了。當我回來時,團隊拋出了組件,並使用傳統技術重新編寫了自己的組件。它包含更多的代碼,比較笨拙,並且表現不佳,但是他們無法確定如何將功能添加到我編寫的組件,並確定它們必須這樣做。沒有什麼可以挽救。這些人也是聰明人。
他們錯了嗎?在可維護性方面,我會說他們做了正確的選擇,即使它讓我傷心。
我這個anechdote的一點是,T4有超過模板偏特招數一些好處:
- 從T4生成的代碼是很容易調試和理解
- T4是簡單
- T4更功能強大
- T4可以執行部分構建過程或點播
- 如果維護人員可以在T4模板中找到他們的頭部,他們仍然可以挽救代碼(start mai獲取生成的代碼並丟棄模板)。這在上面的陰莖疙瘩是不可能的。
當然,在C++中,MetaProgramming是預處理器和部分模板專業化的組合。
缺點
存在與當然T4缺點;
- 它是特定於Visual Studio(或特定於Mono)。但是,生成的代碼當然可以由GCC和其他人編譯。
- 這是非標準的
- Visual Studio C++ Projects似乎並不支持T4,它迫使我使用虛擬.NET項目來生成代碼frmo。
結束語
所有的一切我已經失去了興趣做先進的元編程C++使用與預處理或類型系統(我使用他們雖然較簡單的任務)花哨的技巧,並依賴於T4爲那些日子。
如果有人對如何在C++中使用它的示例感興趣,則可以檢出InteractiveGraphics。它是一個用於C#,VB,PowerShell和SmallBasic的庫,用於執行簡單的圖形處理。我使用T4爲.NET和C++之間的消息傳遞生成所有API和樣板代碼(如果我可以避免它,我不使用C++/CLI所有)來自描述API的模型。然後添加一個新方法就像擴展模型和重新生成所有temlate文件一樣簡單,然後我用C++實現一個抽象方法並且做有趣的事情。
- 1. T4模板和EF與代碼生成
- 2. 使用T4模板生成代碼
- 3. C代碼生成模板
- 4. 錯誤的字符代碼生成和T4文本模板
- 5. 使用t4模板生成動態代碼
- 6. 如何刷新SubSonic T4模板生成的代碼?
- 7. Visual Studio 2010用於模板類型的T4代碼生成
- 8. T4編輯生成的代碼生成
- 9. 如何從嵌套模板塊中生成T4模板中的代碼塊?
- 10. 如何從該模板中斷開由T4模板生成的代碼?
- 11. 如何在VS C++項目中使用T4代碼生成模板?
- 12. Groovy模板 - 代碼生成
- 13. 生成T4模板爲公開
- 14. 使用T4模板生成ViewModels
- 15. 使用模板生成.xaml和.xaml.cs T4
- 16. 生成類使用T4模板
- 17. 用新名稱生成T4模板庫
- 18. 查找T4文本模板類代碼
- 19. VsAddin或T4代碼生成(VS 2008)
- 20. 尋找T4 CSLA代碼生成器
- 21. T4模板攔截
- 22. 添加自定義T4模板DDL生成模板DROPDOWNLIST
- 23. 是否有可用於從xsd生成c#類的T4模板?
- 24. IEnumerable T4模板
- 25. 使用T4模板爲EF4生成的實體添加自定義代碼?
- 26. 當使用T4模板生成代碼時引用第三方DLL
- 27. 代碼生成
- 28. 適用於Java的代碼/模板生成器
- 29. MVC視圖引擎替代T4的編譯時代碼生成C#代碼?
- 30. 簡單的映射器模式C#代碼生成模板
是的。愚蠢的問題,我想。雖然我確實看到您可以指定模板語言是VB或C#。這大概與自動編譯模板的輸出有關? – mackenir 2008-11-27 11:06:58
您的模板使用C#或VB生成,但我不認爲這與輸出有關。 – 2008-11-27 20:35:54