2011-03-18 18 views
8

저는 템플릿에 크게 의존하는 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>>(...)를 호출 할 것이라는 점을 알고있다, 그래서 여전히 컴파일러는 사용자 아무것도 컴파일 할 수 있도록하는 동안 명시 적 기능의 이러한 유형의 단지 일부 조합을 인스턴스화 싶습니다 나는 명시하지 않았다. 이렇게하면 공유 라이브러리의 컴파일 속도와 헤더 전용 라이브러리의 유연성을 유지할 수 있습니다.

이 유형의 것이 가능합니까? 그렇다면 구문은 무엇입니까?

+0

제거 메타 프로그래밍 태그 –

답변

9

명시 적 인스턴스화라고합니다. 헤더 파일에서 어딘가에 ns::drawCircle<T,S> 함수 템플릿 이후에 정의되어 있습니다 :

라이브러리에 *의 .cpp 파일에서
namespace ns { 
    extern template void drawCircle<>(
     Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle); 
} 

:

namespace ns { 
    template void drawCircle<>(
     Image<PixRGB<byte> >& img, PixRGB<byte> color, Circle); 
} 
관련 문제