2008-11-17 123 views

回答

5

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

+0

是的。愚蠢的问题,我想。虽然我确实看到您可以指定模板语言是VB或C#。这大概与自动编译模板的输出有关? – mackenir 2008-11-27 11:06:58

+0

您的模板使用C#或VB生成,但我不认为这与输出有关。 – 2008-11-27 20:35:54

7

有点冗长的答案了,我认为有些人可能会觉得很有意思

我会说T4是极好的生成C++与

也许有人会反驳说,C++已经有工具来做元编程与像:

预编译

使用预处理和高阶宏就可以实现somewha吨什么,你可以用T4做,但我说有T4的一些非常有说服力的好处:

  1. 从T4生成的代码是很容易调试和理解
  2. 元编程与T4比与预处理简单。预处理器可以这样做最大/最小宏很容易,但是当我们谈论模型驱动的模板,它变得难以
  3. T4是更强大的比预处理器使它更容易开发模板
  4. T4可以作为的一部分来执行建设过程中或按需

模板偏特

我不喜欢模板偏特招数,但我从没有每个人都喜欢保持他们的经验发言。

我一直努力减少代码冗余,努力提高可维护性。另外,如果可能的话,我更喜欢编译时错误超过运行时错误。所以在阅读Andrei Alexandrescu的Modern C++后,我想我找到了答案

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

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

我这个anechdote的一点是,T4有超过模板偏特招数一些好处:

  1. 从T4生成的代码是很容易调试和理解
  2. T4是简单
  3. T4更功能强大
  4. T4可以执行部分​​构建过程或点播
  5. 如果维护人员可以在T4模板中找到他们的头部,他们仍然可以挽救代码(start mai获取生成的代码并丢弃模板)。这在上面的阴茎疙瘩是不可能的。

当然,在C++中,MetaProgramming是预处理器和部分模板专业化的组合。

缺点

存在与当然T4缺点;

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

结束语

所有的一切我已经失去了兴趣做先进的元编程C++使用与预处理或类型系统(我使用他们虽然较简单的任务)花哨的技巧,并依赖于T4为那些日子。

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