T4模板 - 适合生成C ++代码?

时间:2008-11-17 12:52:30

标签: c++ code-generation t4 template-engine

是否有任何问题可能导致MS的T4模板代码生成系统不适合生成C ++代码?

2 个答案:

答案 0 :(得分:7)

有点冗长的答案,但我觉得有些人可能觉得有趣

我想说T4非常适合用

生成C ++

有些人可能反驳说C ++已经有了使用以下方法进行MetaProgramming的工具:

预处理器

使用预处理器和高阶宏可以实现T4的功能,但我说T4有一些非常令人信服的好处:

  1. T4生成的代码易于调试和理解
  2. 使用T4进行MetaProgramming比使用预处理器更简单。预处理器可以很容易地执行像max / min这样的宏,但是当我们谈论模型驱动的模板时,它很难实现
  3. T4比预处理器更强大,可以更容易地开发模板
  4. T4可以作为构建过程或按需
  5. 的一部分执行

    部分模板专业化

    我确实喜欢部分模板专业化技巧,但我从经验中说出并非每个人都喜欢维护它们。

    我一直努力减少代码冗余,以提高可维护性。另外,在可能的情况下,我更喜欢编译时错误而不是运行时错误。所以在阅读了Andrei Alexandrescu的Modern C ++后,我以为我找到了答案

    我写了一本灵感来自这本书的作品很棒,然后我去度假了。当我回来时,团队抛出了组件并使用传统技术重写了自己的组件。它包含更多的代码,更加笨拙并且表现不佳,但他们无法想象如何将功能添加到我编写的组件中并确定他们必须这样做。没有什么可以挽救。这些人也很聪明。

    他们这样做错了吗?在可维护性方面,我会说他们做了正确的选择,即使它让我很难过。

    我对这个方法的看法是,T4比部分模板专业化技巧有一些好处:

    1. T4生成的代码易于调试和理解
    2. T4更简单
    3. T4更强大
    4. T4可以执行构建过程或按需
    5. 的一部分
    6. 如果维护人员可以绕过T4模板,他们仍然可以抢救代码(开始维护生成的代码并丢弃模板)。在上面的商品中,这是不可能的。
    7. 当然,在C ++中,MetaProgramming是PreProcessor和部分模板专业化的结合。

      <强>缺点

      当然T4存在缺点;

      1. 它是Visual Studio特定的(或特定于Mono)。但是,生成的代码当然可以由GCC和其他人编译。
      2. 非标准
      3. Visual Studio C ++ Projects似乎不支持T4,这迫使我使用虚拟.NET项目生成代码frmo。
      4. 结束

        总而言之,我对使用PreProcessor或类型系统使用花哨技巧进行高级MetaProgramming C ++失去了兴趣(虽然我确实将它们用于更简单的任务)并且最近依赖于T4。

        如果有人对如何在C ++中进行操作感兴趣,可以查看InteractiveGraphics。这是一个用于C#,VB,PowerShell和SmallBasic的库,用于执行简单的图形。我使用T4生成所有API和样板代码,用于在.NET和C ++之间传递消息(如果我能避免它,我不使用C ++ / CLI所有)来自描述API的模型。添加一个新方法就像扩展模型和重新生成所有temlate文件一样简单,然后我在C ++中实现一个抽象方法并做有趣的事情。

答案 1 :(得分:5)

它可以生成您想要的任何文本,包括C ++代码。