은 내가 템플릿 함수에 대한 포인터를 만들 :범위 내에서 템플릿 기능에 대한 포인터를 만들 수 있습니까?
template <class T>
void foo(T x){}
int main()
{
template <class T>
void (*ptr)(T);
return 0;
}
내가 가지고 오류 위 : error C2951: template declarations are only permitted at global or namespace scope
는
그래서 나는 전역 범위에서 템플릿 함수에 대한 포인터를 선언하여 문제를 해결할 수 있고 그것을 잘 작동합니다 :
template <class T>
void foo(T x){ cout << "foo()" << endl;}
template <class T>
void (*ptr)(T);
int main()
{
ptr = foo;
(*ptr)(7);
return 0;
}
- 처음 코드와 같은 범위 안에 템플릿 함수에 대한 포인터를 선언하는 방법은 무엇입니까?
두 번째 코드 스 니펫이 수정 *되지 않았습니다. – WhiZTiM
템플릿 함수는 일부 유형으로 인스턴스화 될 때까지 존재하지 않으므로 함수 템플릿에 대한 포인터는 불가능합니다. 'foo' –
AndyG
'템플릿 void (* ptr) (T);'와 같은 특정 인스턴스에 대한 포인터는 C++ 14 이후의 변수 템플릿이 될 수 있습니다. 그러나 사용법은'ptr = foo;'와 같을 것이다. –
Jarod42