我正在研究模板类的代码库。它只是 header (没有 .cpp 文件)。我想隐藏实现并提供一个共享库以及几个仅包含声明的 header 。不幸的是听起来没有意义。既然没有编译过的代码,那么这样一个共享库里会放什么呢?编译后尝试从 header 中删除定义会导致 undefined reference 。有没有一种方法可以强制编译器在 dll 或共享库中传送对象而不必显式实例化模板类?
最佳答案
不,在可预见的 future 没有也不会有办法做到这一点。提供模板 C++ 代码的唯一方法是仅作为头文件。 Modules可能会改变这一点,但这不太可能在您的图书馆完成之前发生。
您可以尝试的是拆分为实现并显式实例化所有可能的用例。那么您发布的库将无法与任何其他类型一起使用,然后是实例化的类型,并且会显着减少模板带来的好处。
关于c++ - 将仅包含 C++ header 的模板编译为共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11602375/