C ++ 0x에서 변경된 AFAIK.
나는 그것이 단지 감독이라고 생각합니다 (함수를 static
클래스 의 구성원 으로 배치하면 더 자세한 코드로 부분적 전문화 효과를 항상 얻을 수 있다는 점을 고려 ).
관련 DR (결함 보고서)이있는 경우이를 조회 할 수 있습니다.
편집 : 이것을 확인하면 다른 사람들도 믿었지만 아무도 초안 표준에서 그러한 지원을 찾을 수 없습니다. 이 SO 스레드 는 함수 템플릿의 부분 전문화가 C ++ 0x에서 지원되지 않음 을 나타내는 것 같습니다 .
편집 2 : "함수를 static
클래스 의 구성원 으로 배치"가 의미하는 바의 예 :
#include <iostream>
using namespace std;
void say( char const s[] ) { std::cout << s << std::endl; }
namespace detail {
template< class T, class U >
struct F {
static void impl() { say( "1. primary template" ); }
};
template<>
struct F<int, char> {
static void impl() { say( "2. <int, char> explicit specialization" ); }
};
template< class T >
struct F< char, T > {
static void impl() { say( "3. <char, T> partial specialization" ); }
};
template< class T >
struct F< T, int > {
static void impl() { say( "4. <T, int> partial specialization" ); }
};
}
template< class T, class U >
void f() { detail::F<T, U>::impl(); }
int main() {
f<char const*, double>();
f<int, char>();
f<char, double>();
f<double, int>();
}
template<typename T, typename U> void f(T t, U u) {}
도template<> void f(int t, char u) {}
허용된다.