C ++ 부분 전문화 (기능 포인터)
-
22-08-2019 - |
문제
아래의 법적 C ++인지 아닌지 알 수 있습니까?
template < typename s , s & (*fn) ( s * ) >
class c {};
// 부분 전문화
template < typename s , s & (*fn) ( s * ) >
class c < s*, s* & (*fn)(s**) {};
g ++ (4.2.4) 오류 : 일정한 표현 오류에서 함수 호출이 나타날 수 없습니다 : 템플릿 인수 2는 유효하지 않습니다.
명백한 전문화를 위해 작동하지만
int & func ( int * ) { return 0; }
template <> class c < int , func> class c {};
해결책
나는 당신이 의미한다고 생각합니다
template < typename s , s & (*fn) ( s * ) >
class c {};
// partial specialization
template < typename s , s & (*fn) ( s * ) >
class c < s*, fn > {};
제휴하지 않습니다 StackOverflow