문제

아래의 법적 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 >  {};
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top