AFAIK đã được thay đổi trong C ++ 0x.
Tôi đoán đó chỉ là một sự giám sát (xem xét rằng bạn luôn có thể nhận được hiệu ứng chuyên môn hóa từng phần với nhiều mã dài dòng hơn, bằng cách đặt hàm như một static
thành viên của một lớp).
Bạn có thể tra cứu DR (Báo cáo lỗi) có liên quan, nếu có.
CHỈNH SỬA : kiểm tra điều này, tôi thấy rằng những người khác cũng đã tin vào điều đó, nhưng không ai có thể tìm thấy bất kỳ hỗ trợ nào như vậy trong tiêu chuẩn dự thảo. Chủ đề SO này dường như chỉ ra rằng chuyên môn hóa một phần của các mẫu hàm không được hỗ trợ trong C ++ 0x .
CHỈNH SỬA 2 : chỉ là một ví dụ về ý của tôi khi "đặt hàm như một static
thành viên của một lớp":
#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) {}
cũngtemplate<> void f(int t, char u) {}
được cho phép.