Создание шаблона для использования в библиотеке - PullRequest
8 голосов
/ 18 марта 2011

Я создаю библиотеку обработки изображений на 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 Ответ

9 голосов
/ 18 марта 2011

Это называется явной реализацией. В заголовочном файле где-то после того, как был определен шаблон функции 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...