据我了解,可以使用“export”关键字,以便可以通过头文件公开模板类或函数签名,并在库文件中抽象实际实现。
谁能提供一个实用的示例程序来说明如何做到这一点?
使用它时是否有任何缺点或需要注意的要点?
编辑:基于答案的后续问题。正如答案中提到的那样,’export’ 在 C++0x 中已被弃用,即使对于 C++03x,编译器也很少支持。鉴于这种情况,如何在 lib 文件中隐藏实际实现并仅通过头文件公开声明,以便最终用户可以知道公开 API 的签名是什么,但无法访问实现相同的源代码?
原文由 Alok Save 发布,翻译遵循 CC BY-SA 4.0 许可协议
注意:这个答案是关于
export
pre-C++20 的历史用法; C++20 将关键字重新用于模块中。首先:大多数编译器(包括 gcc、Clang 和 Visual Studio)不支持
export
关键字。它已在单个前端实现:EDG 前端,因此只有使用它的编译器(Comeau 和 icc)支持此功能。 EDG 实现者的反馈非常简单: 花费了我们时间,非常复杂,我们建议不要实现它(1),因此它已在 C++0x 中被删除。
现在,标准允许(这至少由 gcc 实现):
并让它的行为与您对常规函数的期望一样。
注意:正如 Johannes 在评论中指出的那样,如果在标头中定义了函数的完全特化,则必须将其标记为内联,否则链接器会报错。
编辑:
(1) 终于找到了我的参考 为什么我们不能负担出口 (PDF) ,由 Tom Plum 撰写,由 Edison Design Group 的 Steve Adamczyk、John Spicer 和 Daveed Vandevoorde 审阅,他们最初在 EDG 前端实现了它。