Trong bài viết này, ta sẽ thảo luận về hoạt động, cú pháp và ví dụ của template std::is_final trong C++ STL.
is_final là template nằm trong header <type_traits>. Dùng để kiểm tra kiểu T có phải là lớp final (final class) hay không.
Lớp final (final class) trong C++ là gì?
Khi khai báo lớp với từ khóa final thì đó là lớp final. Lớp final là loại lớp đặc biệt không thể kế thừa để tạo lớp khác. Trong C++, để làm lớp final, ta làm lớp đó thành friend và kế thừa ảo (virtual inherit) để làm cho lớp đó không thể kế thừa.
Ví dụ lớp final
class final_abc; //Lớp sẽ làm final class abc { private: abc(){cout<<"abc constructor";} friend class final_abc; }; class final_abc : virtual abc //làm nó thành final class. { public: final_abc(){cout<<"Final class constructor";} }; class derive : public final_abc; //Lỗi không thể kế thừa
Cú pháp
template <class T> is_final;
Tham số
Template chỉ có tham số kiểu T, kiểm tra T có phải lớp final không.
Giá trị trả về
Trả về boolean: true nếu T là lớp final, false nếu không.
Ví dụ
Input: class final_abc; class abc { friend class final_abc; }; class final_abc : virtual abc{ }; is_final<abc>::value; Output: False
Input: class final_abc; class abc { friend class final_abc; }; class final_abc : virtual abc{ }; is_final<final_abc>::value; Output: True
Ví dụ
#include <iostream> #include <type_traits> using namespace std; class TP { //Tương tự nếu là struct }; class T_P final { //Tương tự nếu là struct }; int main() { cout << boolalpha; cout << "Using is_final"; cout << "\nTutorials Point: "<<is_final<TP>::value; cout << "\nT_P Final: "<<is_final<T_P>::value; cout << "\ncheck for char: "<<is_final<int>::value; return 0; }
Đầu ra
Nếu chạy mã trên sẽ cho kết quả:
Using is_final Tutorials Point: false T_P Final: true check for char: false
Ví dụ
#include <iostream> #include <type_traits> using namespace std; union TP { //Union }; union T_P final { //Union }; int main() { cout << boolalpha; cout << "Using is_final"; cout << "\nTutorials Point: "<<is_final<TP>::value; cout << "\nT_P Final: "<<is_final<T_P>::value; cout << "\ncheck for char: "<<is_final<int>::value; return 0; }
Đầu ra
Nếu chạy mã trên sẽ cho kết quả:
Using is_final Tutorials Point: false T_P Final: true check for char: false