당신은 전체 템플릿 클래스를 전문으로 할 수 있습니다 클래스 템플릿의 유효
template<typename T>
void A<T, true>::f()
{
std::cout << "true" << std::endl;
}
부분적으로 클래스 템플릿의 특정 인수 클래스 템플릿의 멤버를 전문으로되지 않도록 : 당신은 무엇을하려고하는 것은 유효하지 않습니다
template<>
void A<int, true>::f()
{
std::cout << "true" << std::endl;
}
하지만 당신은 모든 템플릿 인수를 제공해야 는 "A의 부분 특수화 멤버 함수 'f'를 <T, true>
에 대해 정의합니다. 그러한 부분적 특수화가 없으므로 컴파일러에서 오류가 발생합니다. 모든 인수를 제공 할 수없는 경우
template <class T, bool flag>
class A
{
template<typename, bool> struct params { };
void f()
{
f(params<T, flags>());
}
template<typename U>
void f(params<U, true>) {
std::cout << "true" << std::endl;
}
template<typename U, bool flag1>
void f(params<U, flag1>) {
std::cout << "dunno" << std::endl;
}
};
는 컴파일러가 부분 템플릿 특수화를 수 있습니까 다음과 같이
, 당신은
f
를 오버로드 할 수 있습니까? – QuentinUK