代码之家  ›  专栏  ›  技术社区  ›  Vicent Marti

模板分布在多个文件中

  •  22
  • Vicent Marti  · 技术社区  · 17 年前

    当在多个文件上声明模板时,C++似乎相当不成熟。更具体地说,当使用模板类时,链接器希望在单个编译器对象文件中包含该类的所有方法定义。当您考虑到头、其他声明、继承等时,事情会变得非常混乱。

    对于跨多个文件组织或重新分发模板化成员定义,是否有任何常规建议或解决方法?

    3 回复  |  直到 17 年前
        1
  •  27
  •   DrPizza    17 年前

    对于跨多个文件组织或重新分发模板化成员定义,是否有任何常规建议或解决方法?

    对不要。

    C++规范允许编译器能够“看到”整个模板(声明)

    处理这一问题的最简单方法是将所有内容转储到标题中,在可能的地方内联,在必要的地方外联。

    如果您真的认为这是一种不可接受的冒犯,那么一个常见的选择是将模板拆分为通常的头/实现对,然后#在头的末尾包含实现文件。

    C++的“导出”功能可能提供也可能不提供另一种解决方法。该功能的支持和定义较差;虽然原则上它应该允许对模板进行某种单独的编译,但它不一定能避免编译器能够看到整个模板体的要求。

        2
  •  5
  •   glibg10b    4 年前

    跨越多少个文件?如果您只是想将类定义与实现分开,那么请尝试 this article

        3
  •  3
  •   Glorfindel Doug L.    7 年前

    如果编译器支持C++0x,则 extern

    看见 here 请简单解释一下。

    C++模板:完整的指南 大卫·范德沃德(David Vandevoorde)和尼科莱·M·约瑟蒂斯(Nicolai M.Josuttis)描述了其他选择。

    alt text