Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Template is_final trong C++


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