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++实现一个抽象方法并且做有趣的事情。
是的。愚蠢的问题,我想。虽然我确实看到您可以指定模板语言是VB或C#。这大概与自动编译模板的输出有关? – mackenir 2008-11-27 11:06:58
您的模板使用C#或VB生成,但我不认为这与输出有关。 – 2008-11-27 20:35:54