首页 >后端开发 >C++ >如何从 DLL 导出包含 `std::` 对象的类?

如何从 DLL 导出包含 `std::` 对象的类?

Patricia Arquette
Patricia Arquette原创
2024-11-10 05:04:02875浏览

How to Export Classes Containing `std::` Objects from a DLL?

从 DLL 导出包含 std:: 对象(向量、地图等)的类

简介

导出包含来自 DLL 的向量和字符串等复杂对象的类引起了有关 DLL 接口要求的担忧。本文分析了该问题,并探讨了在解决编译器警告的同时导出此类类的解决方案。

编译器警告

当尝试导出包含 std:: 对象的类时,编译器可能会发出有关需要 DLL 接口的成员的警告。这些警告表明编译器无法确保导出类的方法可供使用 DLL 的客户端使用。

转发声明

解决这些警告的一种方法是使用使用 DLL_EXPORT 转发声明。虽然这可能会抑制警告,但它实际上并没有导出所需的方法。要完全解决此问题,包含 std:: 对象的类必须在其编译单元中标记为 DLL_EXPORT。

成员可访问性

并非导出的所有成员类需要是 DLL_EXPORT。客户端无法访问的私有成员可以被忽略或禁用其警告。但是,客户端可能与之交互的成员必须导出其方法。

可能的解决方案

根据情况,可以考虑以下几种方法:

  • 禁用警告:对于不可导出的成员,可以禁用警告以避免混乱。
  • DLL 导出包装器: 创建 DLL 导出包装器函数或需要导出的成员的间接方法。
  • PIMPL 惯用法: 利用 PIMPL 惯用法减少外部可见成员的数量。

前向声明和实例化

使用 DLL_EXPORT 前向声明模板类确实会在当前编译单元中创建实例化。但是,这仅适用于模板特化,不适用于具体类,具体类需要显式标记为 DLL_EXPORT。

以上是如何从 DLL 导出包含 `std::` 对象的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn