是否有任何问题可能导致MS的T4模板代码生成系统不适合生成C ++代码?
答案 0 :(得分:7)
有点冗长的答案,但我觉得有些人可能觉得有趣
我想说T4非常适合用
生成C ++有些人可能反驳说C ++已经有了使用以下方法进行MetaProgramming的工具:
预处理器
使用预处理器和高阶宏可以实现T4的功能,但我说T4有一些非常令人信服的好处:
部分模板专业化
我确实喜欢部分模板专业化技巧,但我从经验中说出并非每个人都喜欢维护它们。
我一直努力减少代码冗余,以提高可维护性。另外,在可能的情况下,我更喜欢编译时错误而不是运行时错误。所以在阅读了Andrei Alexandrescu的Modern C ++后,我以为我找到了答案。
我写了一本灵感来自这本书的作品很棒,然后我去度假了。当我回来时,团队抛出了组件并使用传统技术重写了自己的组件。它包含更多的代码,更加笨拙并且表现不佳,但他们无法想象如何将功能添加到我编写的组件中并确定他们必须这样做。没有什么可以挽救。这些人也很聪明。
他们这样做错了吗?在可维护性方面,我会说他们做了正确的选择,即使它让我很难过。
我对这个方法的看法是,T4比部分模板专业化技巧有一些好处:
当然,在C ++中,MetaProgramming是PreProcessor和部分模板专业化的结合。
<强>缺点强>
当然T4存在缺点;
结束
总而言之,我对使用PreProcessor或类型系统使用花哨技巧进行高级MetaProgramming C ++失去了兴趣(虽然我确实将它们用于更简单的任务)并且最近依赖于T4。
如果有人对如何在C ++中进行操作感兴趣,可以查看InteractiveGraphics。这是一个用于C#,VB,PowerShell和SmallBasic的库,用于执行简单的图形。我使用T4生成所有API和样板代码,用于在.NET和C ++之间传递消息(如果我能避免它,我不使用C ++ / CLI所有)来自描述API的模型。添加一个新方法就像扩展模型和重新生成所有temlate文件一样简单,然后我在C ++中实现一个抽象方法并做有趣的事情。
答案 1 :(得分:5)
它可以生成您想要的任何文本,包括C ++代码。