Chuyển đến nội dung chính
Mô-đun 8 · Bài học 1 trong tổng số 217/18 trong khóa học~12 min
Bài học theo mô-đun (1/2)

Mẫu chức năng

Mẫu cho phép viết mã chung bằng C++. Thông qua các mẫu, chúng ta có thể định nghĩa các hàm hoặc lớp hoạt động trên các tham số kiểu chung, cho phép trình biên dịch tạo mã thực tế cho các kiểu cụ thể được yêu cầu.

Xác định mẫu hàm

Để xác định mẫu hàm, chúng ta đặt trước định nghĩa hàm bằng từ khóa template, theo sau là danh sách các tham số loại được đặt trong dấu ngoặc nhọn <>. Thông thường, typename hoặc class được sử dụng để khai báo một loại chung.

C++
// T is the generic type parameter
template <typename T>
T add(T a, T b) {
    return a + b;
}

Lệnh gọi hàm và khấu trừ đối số mẫu

Khi gọi hàm, chúng ta có thể chỉ định rõ ràng loại trong dấu ngoặc nhọn:

C++
int res1 = add<int>(5, 10);
double res2 = add<double>(3.14, 2.71);

Tuy nhiên, trình biên dịch C++ thường có thể suy ra loại một cách tự động từ các tham số đầu vào được truyền (Trừ trừ đối số mẫu):

C++
int res1 = add(5, 10); // The compiler deduces that T is int

Hãy tự mình thử

tập thể dục#cpp.m8.l1.e1
Nỗ lực: 0Đang tải…

Xác định một mẫu hàm có tên myMax nhận hai tham số thuộc loại chung T và trả về giá trị lớn hơn trong hai tham số.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Bắt đầu bằng cách viết `template <typename T>` theo sau là chữ ký `T myMax(T a, T b)`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#cpp.m8.l1.e2
Nỗ lực: 0Đang tải…

Viết một mẫu hàm có tên printPair nhận hai tham số thuộc các loại chung khác nhau T1 và T2 và in hai đối số cách nhau bằng dấu cách bằng std::cout.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo mẫu phải chỉ định hai tham số: `template <typename T1, typename T2>`.

Giải pháp khả dụng sau 3 lần thử