문자열에 특수화 된 템플릿 함수에 대한 포인터를 사용하는 방법은 무엇입니까?
-
20-08-2019 - |
문제
문자열 입력을 기반으로 적절한 루틴을 실행하기 위해 필터 기능 세트를 사용하려고했습니다. 템플릿을 사용하여 일반적인 케이스에 대한 매칭 기능을 만들려고했지만 특수 함수에 대한 포인터를 저장하려고 할 때 "유형이 아닌 유형이 아닌 유형"오류가 발생합니다 (실제 응용 프로그램에서 구조).
Visual C ++ 8 '콘솔 응용 프로그램'에서 증류 된 예제
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
오류가 발생하지 않습니다
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
(메인 리턴 값에도 오류가 있지만 여기서는 관심이 없습니다.)
동일한 예가 If가 성공했습니다 const char *
int로 대체됩니다.
해결책
템플릿-값 매개 변수로서의 문자열은 ISO 표준에 의해 금지됩니다.
제휴하지 않습니다 StackOverflow