Tiêu đề có một chút mơ hồ.Chuyên môn về mẫu cho nhiều loại
phép nói rằng tôi có một mẫu định nghĩa là:
template < typename T >
void foo (int x) ;
template <>
void foo<char> (int x) ;
template <>
void foo<unsigned char> (int x) ;
template <>
void foo<short> (int x) ;
...
Bên trong cả hai foo<signed>()
và foo<unsigned>()
thực hiện chính xác những điều tương tự. Yêu cầu duy nhất là T
là loại 8 bit.
Tôi có thể làm điều này bằng cách tạo một mẫu khác để nhập xác định loại tiêu chuẩn dựa trên kích thước.
template < typename T, size_t N = sizeof(T) > struct remap ;
template < typename T, size_t > struct remap<1>
{
typedef unsigned char value;
}
...
Lưu ý, mẫu chức năng không thể có thông số mặc định. Giải pháp này chỉ di chuyển vấn đề đến một mẫu khác và cũng giới thiệu một vấn đề nếu ai đó cố gắng truyền một kiểu cấu trúc làm tham số.
Cách thanh lịch nhất để giải quyết vấn đề này mà không lặp lại các khai báo hàm đó là gì?
Đây không phải là câu hỏi C++ 11.
Bạn đã thử sử dụng enable_if để kiểm tra kích thước của loại? Tôi giả sử bạn đang làm điều tương tự cho tất cả các loại có sẵn cùng kích thước? – Borgleader
@Borgleader enable_if là C++ 11 – Twifty
SFINAE và ['enable_if'] (http://en.cppreference.com/w/cpp/types/enable_if) có thể được triển khai trong C++ 03. – dyp