【发布时间】:2011-09-08 13:50:34
【问题描述】:
我们正在设计一个新的 C++ 库,并决定采用基于模板的方法以及针对极端情况的一些特定的部分模板特化。特别是,这将是一个仅包含标头的模板库。
现在,有人担心这会导致二进制文件中出现大量代码重复,因为此模板“库”将被编译到使用它的任何其他共享库或可执行文件中(可以说只有那些被使用的部分)。我仍然认为这不是问题(特别是,编译器甚至可能内联它无法跨越共享库边界的东西)。
但是,既然我们知道这将用于有限的类型集,有没有办法将这个头文件编译到一个库中,并提供一个只包含声明而没有其他内容的不同头文件? 请注意,库不仅必须包含通用实现,还必须包含部分专业化..
【问题讨论】:
-
您的意思是“有限”还是“有界”?显然,您在计算机上或在这个宇宙中所做的任何事情都是有限的,因此区分至关重要。
-
我的意思是有界的:我们需要为大约 8 种类型实例化这些模板,仅此而已。所以我们可以很容易地写下一个列表。
-
嗯,我不完全确定,你当然必须提供实际的头文件,但你可以将这些类型的显式实例添加到源文件并编译并声明这些模板@ 987654321@ 其他任何地方。我从未尝试过,但我认为这应该具有预期的效果。
标签: c++ templates shared-libraries