C++ 用于库使用的模板实例化

C++ 用于库使用的模板实例化,c++,templates,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); 模板 void

我正在用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);
模板
void ns::drawCircle(ns::Image&img,S color,ns::Circle);
现在,我知道95%的用户只想调用
ns::drawCircle(…)
,所以我想显式地实例化这些类型函数的一些组合,同时仍然允许编译器自定义编译我没有指定的任何内容。这样做将使我能够保持共享库的编译速度和仅头部库的灵活性


这类事情可能发生吗?如果可能,语法是什么?

这称为显式实例化。在头文件中,在定义了
ns::drawCircle
函数模板之后的某处:

namespace ns {
    extern template void drawCircle<>(
        Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle);
}
ns{
外模板空心圆(
图像和img、PixRGB颜色、圆形);
}
在库中的*.cpp文件中:

namespace ns {
    template void drawCircle<>(
        Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle);
}
ns{
模板空心画圈(
图像和img、PixRGB颜色、圆形);
}