2011-04-11 6 views
2

dll의 헤더 파일에 정의한 템플릿 함수가 있습니다. 모든 소비자가 헤더 파일을 읽고 어쨌든 전체 기능을 갖기 때문에이 함수를 내보낼 필요가 없습니다. 그러나 헤더 파일에 정의 할 수없는 해당 템플릿의 전문화가 있습니다 (또는 재정의 링커 오류가 발생합니다). 그래서 소스 파일에 있어야합니다.dll에서 특수 템플릿 함수 내보내기

이 기능을 내보내는 일반적인 방법은 무엇입니까?

template <typename T> 
bool functionName(/*params*/){ 
//..... 
} 

template<> IMPORTEXPORTMACRO 
bool functionName(/*params*/); 

및 소스 파일은

template<> 
bool functionName(/*params*/){ 
//... 

IMPORTEXPORTMACRO 중 하나 __declspec(dllimport) 또는 dllexport

감사

+3

특수 기능을 인라인으로 만들 수 없습니까? 따라서 헤더 오류를 피하십시오. – GWW

+0

그러면 여러 번 정의 된 함수에서 오류가 발생합니다. – bdwain

+0

코드를 잠깐 보여줄 수 있습니까? (전체 구현이나 다른 것을 표시 할 필요는 없습니다). 내가 인라인이라고 말할 때'인라인'권한을 지정하고 있습니까? – GWW

답변

0

템플릿 일들이 실제로 자리 표시 자입니다입니다 그 매크로 중 하나입니다. 당신이 그것을 사용할 때까지, 컴파일러는 그것을 실제 (함수/클래스) 것으로 대체하지 않을 것입니다. DLL에 넣을 수 없습니다. 유일한 방법은 헤더 파일에 제공하는 것입니다. 구현을 숨기려면 클래스 계층 구조 (런타임 다형성) 사용을 고려하십시오.