将 export 关键字与模板一起使用

新手上路,请多包涵

据我了解,可以使用“export”关键字,以便可以通过头文件公开模板类或函数签名,并在库文件中抽象实际实现。

谁能提供一个实用的示例程序来说明如何做到这一点?

使用它时是否有任何缺点或需要注意的要点?

编辑:基于答案的后续问题。正如答案中提到的那样,’export’ 在 C++0x 中已被弃用,即使对于 C++03x,编译器也很少支持。鉴于这种情况,如何在 lib 文件中隐藏实际实现并仅通过头文件公开声明,以便最终用户可以知道公开 API 的签名是什么,但无法访问实现相同的源代码?

原文由 Alok Save 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

注意:这个答案是关于 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 前端实现了它。

原文由 Matthieu M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题