库使用的模板实例化
Posted
技术标签:
【中文标题】库使用的模板实例化【英文标题】:Template Instantiation for Library Use 【发布时间】:2011-03-18 17:12:25 【问题描述】:我正在用 C++(0x) 构建一个严重依赖模板的图像处理库,我担心这些模板会对用户的编译时间产生影响。例如,我已经将我的图像类定义为 ns::Image,并且我有几种像素类型,例如 ns::PixRGB、ns::PixRGBA、ns::PixHSV 等...
我还会很多图像处理功能,例如
template<class T, class S>
void ns::drawCircle(ns::Image<T> & img, S color, ns::Circle);
现在,我知道 95% 的用户只想调用 ns::drawCircle<PixRGB<byte>, PixRGB<byte>>(...)
,所以我想显式地实例化这些类型函数的 一些 组合,同时仍然允许编译器自定义编译我没有指定的任何东西。这样做可以让我保持共享库的编译速度和仅头文件库的灵活性。
这种事情可能吗?如果可能,语法是什么?
【问题讨论】:
【参考方案1】:这称为显式实例化。在头文件中,在 ns::drawCircle<T,S>
函数模板被定义之后的某处:
namespace ns
extern template void drawCircle<>(
Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle);
在库中的 *.cpp 文件中:
namespace ns
template void drawCircle<>(
Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle);
【讨论】:
以上是关于库使用的模板实例化的主要内容,如果未能解决你的问题,请参考以下文章