有没有什么问题会使微软的T4模板代码生成系统不适合生成C++代码?
有点冗长的回答,但我认为有些人可能会觉得很有趣
我认为T4非常适合生成C++代码
有些人可能会反驳说C++已经有了像:
预处理器
使用预处理器和高阶宏,您可以实现与T4相似的功能,但我认为T4有一些非常有说服力的好处:
部分模板特化
我确实喜欢部分模板特化技巧,但我从经验中得知并不是每个人都喜欢维护它们。
我一直努力减少代码冗余,以增加可维护性。此外,我更喜欢在可能的情况下使用编译时错误而不是运行时错误。因此,在阅读Andrei Alexandrescu的现代C ++之后,我认为我找到了答案。
我写了一个组件,受到这本书的启发,它运行得很好,然后我去度假了。当我回来时,团队已经扔掉了这个组件,并使用传统技术重写了自己的组件。尽管它包含更多的代码,存在错误,并且表现不佳,但他们无法弄清楚如何添加我编写的组件的功能,并决定必须这样做。没有什么可以挽救的了。这些人也很聪明。他们这样做是错的吗?从可维护性的角度来看,我认为他们做出了正确的选择,尽管这使我感到悲伤。
我讲这个轶事的意思是T4比部分模板特化技巧有一些优点:
当然,在C ++元编程中,是预处理器和部分模板特化的组合。
缺点
当然,T4也有一些缺点;
总结
总的来说,我对使用预处理器或类型系统进行高级元编程C++的花俏技巧失去了兴趣(虽然我仍然会在更简单的任务中使用它们),现在我依赖T4来完成这些工作。
如果有人对如何在C++中实现感兴趣,可以查看InteractiveGraphics。这是一个用于C#、VB、PowerShell和SmallBasic的简单图形库。我在其中使用T4从描述API的模型生成所有API和样板代码,以及.NET和C++之间的消息传递(如果可能,我尽量避免使用C++ / CLI)。添加新方法就像扩展模型并重新生成所有模板文件一样简单,然后我在C++中实现一个抽象方法并进行有趣的操作。
它能够生成任何您想要的文本,包括C ++代码。