是否有任何问题可能导致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. C代码生成模板
- 2. 如何刷新SubSonic T4模板生成的代码?
- 3. 错误的字符代码生成和T4文本模板
- 4. Visual Studio 2010用于模板类型的T4代码生成
- 5. 如何从该模板中断开由T4模板生成的代码?
- 6. 如何在VS C++项目中使用T4代码生成模板?
- 7. Groovy模板 - 代码生成
- 8. 使用T4模板生成ViewModels
- 9. 用新名称生成T4模板库
- 10. 寻找T4 CSLA代码生成器
- 11. VsAddin或T4代码生成(VS 2008)
- 12. T4模板拦截
- 13. 添加自定义T4模板DDL生成模板DROPDOWNLIST
- 14. 是否有可用于从xsd生成c#类的T4模板?
- 15. 当使用T4模板生成代码时引用第三方DLL
- 16. 使用T4模板为EF4生成的实体添加自定义代码?
- 17. 适用于Java的代码/模板生成器
- 18. 代码生成
- 19. MVC视图引擎替代T4的编译时代码生成C#代码?
- 20. 简单的映射器模式C#代码生成模板
- 21. Project Lombok与Eclipse模板/代码生成
- 22. Web引用代码生成模板
- 23. vim动态生成代码模板
- 24. C++代码生成
- 25. 是否可以从T4 .tt模板中的其他文件执行代码以生成代码?
- 26. T4模板新手问题
- 27. T4模板保存为Unicode
- 28. 有没有推荐的代码生成手段适合替代C宏?
- 29. C#代码生成
- 30. 如何向由预处理的T4模板生成的C#代码添加一个编译指示
是的。愚蠢的问题,我想。虽然我确实看到您可以指定模板语言是VB或C#。这大概与自动编译模板的输出有关? – mackenir 2008-11-27 11:06:58
您的模板使用C#或VB生成,但我不认为这与输出有关。 – 2008-11-27 20:35:54