【问题标题】:C++ standard on export of Templates, can any one explain it?关于模板导出的 C++ 标准,有人可以解释一下吗?
【发布时间】:2011-03-21 14:48:50
【问题描述】:

非内联函数模板的命名空间范围声明或定义,a
非内联成员函数模板,类的非内联成员函数 模板或类模板的静态数据成员可以在导出之前 关键词。如果这样的模板是在它所在的同一个翻译单元中定义的 声明为已导出,则该定义被视为已导出。首先 包含 export 关键字的模板声明不能跟在 定义。

上面的语句究竟是什么意思?

请任何人解释一下程序?

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    这个复杂的段落意味着如果您在定义模板类之前将其声明为导出,然后在同一个翻译单元(实际上是预处理后的文件)中实际定义该类,则该类定义被导出。但是如果你定义了类并且那么有一个带有“export”关键字的原型,那就不是了。

    那里,那是英语,对吧?

    【讨论】:

      【解决方案2】:

      export 关键字旨在使模板能够在头文件中声明,但在实现文件中定义 - 通常使用任何其他功能的方式。

      不幸的是,编译器制造商在过去十年中或多或少地忽略了export 关键字。 GCC 维护人员和 Microsoft 会告诉您该功能没有足够的“需求”(多么令人惊讶 - 几乎没有人支持它,所以没有人知道它,正如您的问题恰当地证明的那样)。他们还会告诉你,有效实施太难了。

      (背景:EDG 人在 C++ 委员会会议上是这么说的,但其他人坚持将其添加到标准中。最后,EDG 人是第一个,遗憾的是,直到今天,只有据我所知,实际上在他们的编译器前端实现了这个功能。)

      因此,出于所有实际目的,您可以忽略上述声明。模板必须在头文件中定义,并且根本不能“声明”,因为除 EDG 之外的所有编译器前端在这方面都不符合标准。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 2011-11-22
        • 2016-12-12
        相关资源
        最近更新 更多