반응형
템플릿 함수를 명시 적으로 인스턴스화하려면 어떻게해야합니까?
하나의 인수로 템플릿 함수가 있습니다. 해당 함수를 호출하지 않고 해당 함수를 인스턴스화해야한다는 것은 명시 적으로 인스턴스화해야한다는 것을 의미합니다.
나는이 기능을 가지고있다 :
template <class T> int function_name(T a) {}
나는 그 기능을 다음과 같이 인스턴스화했다.
template int function_name<int>(int);
그러나 다음과 같은 오류가 발생했습니다.
error: expected primary-expression before 'template'
error: expected `;' before 'template'
[편집 2] : 코드 형식 문제로 인해 원래 질문의 코드와 관련하여 약간의 혼동이있었습니다. 자세한 내용은 AnthonyHatchkins의 답변을 참조하십시오.
함수를 특수화하거나 무언가 대신 인스턴스화하려는 경우 다음을 수행하십시오.
template <typename T> void func(T param) {} // definition
template void func<int>(int param); // explicit instantiation.
[편집] 명백한 인스턴스화와 전문화에 관해 많은 혼란이있는 것 같습니다. 위에 게시 한 코드는 명시 적 인스턴스화를 처리 합니다. 전문화 구문 이 다릅니다. 전문화 구문은 다음과 같습니다.
template <typename T> void func(T param) {} // definition
template <> void func<int>(int param) {} // specialization
템플릿 뒤에 꺾쇠 괄호가 있습니다!
코드가 정확합니다.
오류 메시지는 여기에서 인용하지 않은 코드의 위치와 관련이 있습니다.
최신 정보:
원래 코드는
template <class T> int function_name(T a) {}
template int function_name<int>(int);
그리고 맞았습니다.
그러나 인용되지 않았으므로 다음과 같이 보입니다 .
template int function_name(T a) {}
template int function_name(int);
다음과 같은 오류가 발생합니다
a.cpp:1: error: explicit instantiation of non-template ‘int function_name’
a.cpp:1: error: expected `;' before ‘(’ token
a.cpp:3: error: ‘function_name’ is not a template function
OP가 인용 한 것과는 분명히 다릅니다.
이 변형에서 두 번째 줄은 정상 <int>
이지만 (여기서는 생략 할 수 있음) 첫 번째 줄에 결함이 있습니다. 컴파일러 T
는 이것이 템플릿 매개 변수 라고 추측 할 수 없습니다 .
참고 URL : https://stackoverflow.com/questions/4933056/how-do-i-explicitly-instantiate-a-template-function
반응형
'Programming' 카테고리의 다른 글
AngularJS에서 약속과 함께 성공 / 오류 / 최종 / 캐치를 사용 (0) | 2020.08.03 |
---|---|
수정 방법 : android.app.RemoteServiceException : 패키지에서 게시 된 잘못된 알림 * : 아이콘을 작성할 수 없음 : StatusBarIcon (0) | 2020.08.03 |
Windows 용 git bash에서 드라이브 변경 (0) | 2020.08.03 |
자바를 사용하여 이메일 보내기 (0) | 2020.08.03 |
텍스트 크기와 다른 안드로이드 화면 크기 (0) | 2020.08.03 |