我正在研究模板类的代码库。它只是标题(没有 .cpp 文件)。我想隐藏实现并提供一个共享库以及几个仅包含声明的标头。不幸的是,听起来没有任何意义。既然没有编译过的代码,那么这样的共享库里会有什么?编译后试图从头文件中删除定义会导致未定义的引用。有没有办法强制编译器在 dll 或共享库中传送对象而不必显式实例化模板类?
问问题
1631 次
2 回答
6
不,在可预见的未来,没有也不会有办法做到这一点。提供模板 C++ 代码的唯一方法是仅作为头文件。模块可能会改变这一点,但这不太可能在你的库完成之前发生。
您可以尝试将其拆分为实现并显式实例化所有可能的用例。然后,您发布的库将无法与实例化类型之外的任何其他类型一起使用,并且会显着减少模板带来的好处。
于 2012-07-22T17:26:03.643 回答
3
模板实现需要在编译时知道。这就是为什么您不能将实现与声明分开的原因。因此,如果您想拥有模板的优势,则无法传递您的标题。
于 2012-07-22T17:33:07.773 回答