Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Template is_final ใน C++

ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ template std::is_final ใน C++ STL

is_final เป็น template ใน header <type_traits> ใช้ตรวจสอบว่าชนิด T เป็น final class หรือไม่

Final Class ใน C++ คืออะไร?

เมื่อประกาศคลาสด้วย specifier final จะเรียกว่า Final Class เป็นคลาสพิเศษที่ไม่สามารถสืบทอด (extend) สร้างคลาสลูกได้ ใน C++ ทำได้โดยทำให้คลาสเป็น friend แล้ว virtually inherit เพื่อป้องกันการขยายคลาส

ตัวอย่าง Final Class

class final_abc; // คลาสที่จะทำเป็น final
class abc {
private:
    abc(){cout<<"abc constructor";}
    friend class final_abc;
};
class final_abc : virtual abc { // ทำให้เป็น final class
public:
    final_abc(){cout<<"Final class constructor";}
};
class derive : public final_abc; // Error: ไม่สามารถสืบทอดได้

ไวยากรณ์

template <class T> is_final;

พารามิเตอร์

Template รับพารามิเตอร์ชนิด T เพียงอย่างเดียว ตรวจสอบว่าเป็น final class หรือไม่

ค่าที่คืน

คืนค่า Boolean: true หากเป็น final class, false หากไม่ใช่

ตัวอย่าง

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

ตัวอย่างโค้ด 1 (Class)

#include <iostream>
#include <type_traits>
using namespace std;

class TP { };
class T_P final { };

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;
}

เอาต์พุต

Using is_final
Tutorials Point: false
T_P Final: true
check for char: false

ตัวอย่างโค้ด 2 (Union)

#include <iostream>
#include <type_traits>
using namespace std;

union TP { };
union T_P final { };

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;
}

เอาต์พุต

Using is_final
Tutorials Point: false
T_P Final: true
check for char: false

หมายเหตุ

  • C++11 มี keyword final โดยตรง: class MyClass final { };
  • is_final ทำงานกับ class, struct, union ที่มี final specifier
  • ชนิดข้อมูลพื้นฐาน (int, char, ฯลฯ) คืนค่า false เสมอ