Programming

템플릿 함수를 명시 적으로 인스턴스화하려면 어떻게해야합니까?

procodes 2020. 8. 3. 21:46
반응형

템플릿 함수를 명시 적으로 인스턴스화하려면 어떻게해야합니까?


하나의 인수로 템플릿 함수가 있습니다. 해당 함수를 호출하지 않고 해당 함수를 인스턴스화해야한다는 것은 명시 적으로 인스턴스화해야한다는 것을 의미합니다.

나는이 기능을 가지고있다 :

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

반응형