C++ C++;关于模板导出的标准,有人能解释一下吗?

C++ C++;关于模板导出的标准,有人能解释一下吗?,c++,templates,C++,Templates,非内联函数模板的命名空间范围声明或定义,A 非内联成员函数模板,类的非内联成员函数 模板或类模板的静态数据成员前面可以有导出 关键词。如果该模板是在其所在的同一翻译单元中定义的 声明为已导出,则定义被视为已导出。第一 包含导出关键字的模板的声明不能跟在 定义 上述声明的真正含义是什么 请将任何一个模板类与程序一起导出?这一复杂的段落意味着,如果在定义模板类之前将其声明为导出,然后在同一个翻译单元(实际上是预处理后的文件)中实际定义该类,则会导出该类定义。但是如果你定义了这个类,然后有了一个带有“

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

上述声明的真正含义是什么


请将任何一个模板类与程序一起导出?

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


这里是英语,对吗?

export关键字用于启用在头文件中声明但在实现文件中定义的模板,这与任何其他函数通常使用的方式相同

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

背景:这是EDG在C++委员会会议上所说的,但是其他人坚持把它添加到标准中。最后,EDG人员是第一个,而且很不幸的是,今天只有在我的编译器前端实现了这个特性的人。 因此,出于所有实际目的,您可以忽略上述声明。模板必须在头文件中定义,并且根本不能“声明”,因为除EDG one之外的所有编译器前端在这方面都不符合标准