Alo*_*ave 33 c++ templates export c++11
正如我所理解的那样,可以使用"export"关键字,以便可以通过头文件公开模板类或函数签名,并在库文件中抽象实际实现.
任何人都可以提供一个实用的示例程序,说明如何做到这一点?
使用此功能时是否有任何缺点或重点?
编辑:基于答案的后续问题.正如答案中所提到的,'export'在C++ 0x中已被弃用,即使对于C++ 03x也很少得到编译器的支持.鉴于这种情况,可以用什么方式隐藏lib文件中的实际实现,只是通过头文件公开声明,以便最终用户可以知道暴露的API的签名是什么,但是无法访问实现相同的源代码?
Mat*_* M. 41
首先:大多数编译器(包括gcc,Clang和Visual Studio)都不支持该export关键字.
它已在单个前端实现:EDG前端,因此只有使用它的编译器(Comeau和icc)才支持此功能.来自EDG实施者的反馈非常简单:它花了我们时间,非常复杂,我们建议不要实现它(1),因此它已被删除在C++ 0x中.
现在,标准允许(这至少由gcc实现):
并使其表现得像你期望的常规功能.
注意:正如Johannes在评论中指出的那样,如果在标题中定义了函数的完全特化,则必须将其标记为内联,否则链接器将会抱怨.
编辑:
(1)最后找到了我的参考资料为什么我们不能负担出口(PDF)由Tom Plum,Steve Adamczyk,John Spicer和Edison Design Group的Daveed Vandevoorde评论,他们最初在EDG前端实现了它.
ltc*_*ltc 12
导出已从C++标准中删除.不要使用它.