图书馆使用的模板实例化

时间:2011-03-18 17:12:25

标签: c++ templates

我正在用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 个答案:

答案 0 :(得分:9)

这称为显式实例化。在头文件中,在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);
}