2012-07-22 49 views
4

我正在研究模板类的代码库。它只是头文件(没有.cpp文件)。我想隐藏实现并提供一个共享库和一些只包含声明的头文件。不幸的是听起来没有任何意义。由于没有编译代码,那么在这样的共享库中会有什么?尝试在编译后从头文件中删除定义,会导致未定义的引用。有没有办法强制编译器在dll或共享库中发布对象,而无需显式实例化模板类?将C++头仅模板编译为共享库

+2

不,只是运送标题。 – 2012-07-22 17:22:38

+0

这是不可能的。 – Jichao 2012-07-22 17:24:01

+3

我认为你可以将你的模板分割成h和cpp文件,并且有一个共享库来显式实例化所有可能的情况。现在您可以将其发送给您的客户,并且可以链接到它。他们可能无法为新类型实例化您的模板,但可以使其工作 – 2012-07-22 17:25:47

回答

5

不,在可预见的未来没有,也不会成为这样做的一种方式。提供模板C++代码的唯一方法只是作为头文件。 Modules可能会改变这种情况,但在图书馆完成之前不太可能发生。

你可以尝试的东西是分裂成实现并明确实例化所有可能的用例。然后,您发布的库不会与任何其他类型的工作,然后实例化,并会显着减少模板带来的好处。

+0

我以为。我很愚蠢,犯了一个错误。上帝这似乎很愚蠢!我需要阅读有关模块。 – fedvasu 2014-10-03 02:15:03

3

模板实现需要在编译时知道。这就是为什么你不能将实现与声明分开的原因。所以如果你想拥有模板的优点,那么传递你的头文件是没有办法的。