c++ - 将仅包含 C++ header 的模板编译为共享库

标签 c++ templates shared-libraries

我正在研究模板类的代码库。它只是 header (没有 .cpp 文件)。我想隐藏实现并提供一个共享库以及几个仅包含声明的 header 。不幸的是听起来没有意义。既然没有编译过的代码,那么这样一个共享库里会放什么呢?编译后尝试从 header 中删除定义会导致 undefined reference 。有没有一种方法可以强制编译器在 dll 或共享库中传送对象而不必显式实例化模板类?

最佳答案

不,在可预见的 future 没有也不会有办法做到这一点。提供模板 C++ 代码的唯一方法是仅作为头文件。 Modules可能会改变这一点,但这不太可能在您的图书馆完成之前发生。

您可以尝试的是拆分为实现并显式实例化所有可能的用例。那么您发布的库将无法与任何其他类型一起使用,然后是实例化的类型,并且会显着减少模板带来的好处。

关于c++ - 将仅包含 C++ header 的模板编译为共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11602375/

相关文章:

c++ - 在源文件 (VC++) 中定义时不导出 DLL 方法

c++ - 相当于 boost::shared_array 的 Qt 智能指针?

android - 如何为 Android 和 IOS 构建一个库?

windows - 对从 DLL 或 SO 导出的符号的写入权限

c - 如果执行时不存在则处理导入库

c++ - 如何在 C++ 中管理位/二进制文件?

c++ - 命名空间困惑

c++ - 编译器忽略函数参数上的 'const'

c++ - 如何在 C++ 中创建一个 "default"流插入运算符?

c++ - 有条件地从函数返回对象类型