Chuyên biệt hóa toàn bộ khuôn mẫu
Chuyên biệt hóa toàn bộ khuôn mẫu cho phép bạn cung cấp cách triển khai hoặc hành vi cụ thể cho khuôn mẫu khi được sử dụng với một bộ tham số loại nhất định. Nó hữu ích khi bạn muốn xử lý các trường hợp đặc biệt hoặc tối ưu hóa mã code của mình cho các kiểu cụ thể.
Cú pháp
Để tạo một chuyên biệt hóa đầy đủ của một khuôn mẫu, bạn cần xác định loại cụ thể mà chuyên biệt hóa sẽ xảy ra. Cú pháp trông như sau:
template <> //Chỉ ra rằng đây là một chuyên biệt hóa
className<specificType> //Lớp chuyên biệt hóa cho kiểu cụ thể
Ví dụ
Xem xét ví dụ sau để chứng minh chuyên biệt hóa toàn bộ mẫu:
// Khuôn mẫu chung
template <typename T>
class MyContainer {
public:
void print() {
std::cout << "Generic container." << std::endl;
}
};
// Chuyên biệt hóa toàn bộ khuôn mẫu cho int
template <>
class MyContainer<int> {
public:
void print() {
std::cout << "Container for integers." << std::endl;
}
};
int main() {
MyContainer<double> d;
MyContainer<int> i;
d.print(); // Đầu ra: Bộ lưu trữ chung.
i.print(); // Đầu ra: Bộ lưu trữ số nguyên.
return 0;
}
Trong ví dụ này, chúng tôi đã định nghĩa một lớp mẫu MyContainer chung cùng với chuyên biệt hóa đầy đủ cho kiểu int. Khi chúng ta sử dụng bộ lưu trữ với kiểu int, phương thức print của triển khai chuyên biệt hóa được gọi. Đối với các kiểu khác, việc triển khai khuôn mẫu chung sẽ được sử dụng.