代码之家  ›  专栏  ›  技术社区  ›  Patrick

基类与模板与生成代码与宏

  •  2
  • Patrick  · 技术社区  · 14 年前

    我必须制定一个小框架,这将是我们的几个应用程序使用。除此之外,该框架将在同一个应用程序中多次使用,但配置略有不同。配置的“本质”比仅仅拥有一些配置选项和一些设置器更复杂。实际上,应用程序必须提供自己的数据结构,这些数据结构将被合并到框架中,这使得它更加复杂。

    • 将逻辑放在模板类中,应用程序应在其中传递自己的类实现
    • 描述应用程序在配置文件中的特定配置,并在生成过程中生成C++代码
    • 提供可用于将“配置”扩展到实际代码的宏

    这些替代方案中有一些比其他的好吗?为什么?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Mike    14 年前

    如果峰值性能真的是一个问题,我会避免运行时多态现象,这不仅是因为虚拟函数调用的vtable查找,还因为:

    • 内联虚拟调用以实现高效的跨函数边界优化有点困难(这同样适用于编译到运行时加载的共享库(“插件”)的生成代码,以及使用不支持链接时优化的编译器从生成代码编译的静态链接模块)。

    宏往往很难调试,所以除非您需要它们进行字符串连接的能力(这是它们在某些情况下相对于模板的独特优势),否则我个人会选择使用静态多态性技术的基于模板的解决方案,如您所指出的 curiously recurring template pattern 和/或模板专门化(如果适用)来处理自定义数据结构。

        2
  •  0
  •   Potatoswatter    14 年前

    使用特定于平台的头文件。这是一个额外的选择,类似于宏,但没有粗糙的。

        3
  •  0
  •   Xion    14 年前

    你说的表现是什么意思?如果是最终代码运行的性能问题,请记住,包含虚拟函数的类继承解决方案在调用它们时将涉及少量开销。

    其他解决方案会为项目的构建阶段带来额外的开销,而且由于代码的“复制”(通过模板具体化、自定义代码生成或宏扩展),可执行文件也会稍微大一些。

    推荐文章