ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของ template std::is_trivial ใน C++ STL
is_trivial เป็น template ใน header <type_traits> ใช้ตรวจสอบว่าชนิด T เป็น trivial class หรือไม่
Trivial Class Type ใน C++ คืออะไร?
เราเรียกชนิดว่า Trivial type เมื่อข้อมูลถูกเก็บในหน่วยความจำแบบติดต่อกัน (contiguous) และยอมรับเฉพาะ static default initialization เท่านั้น รวมถึงอาร์เรย์ ชนิดสเกลาร์ และคลาส
Trivial class คือคลาสที่ trivially default constructed และ trivially copyable ข้อควรระวังในการทำให้คลาสเป็น trivial:
- ไม่มี virtual members หรือ virtual base class
- ไม่มี non-static members
- ไม่มี base class ที่มี non-static members
ไวยากรณ์
template <class T> is_trivial;
พารามิเตอร์
Template รับพารามิเตอร์ชนิด T เพียงอย่างเดียว ตรวจสอบว่าเป็น trivial type หรือไม่
ค่าที่คืน
คืนค่า Boolean: true หากเป็น trivial class, false หากไม่ใช่
ตัวอย่าง
Input: class A {}; class B { B() {} }; class D { virtual void fn() {} };
cout<<"A: "<<is_trivial<A>;
cout<<"B: "<<is_trivial<B>;
cout<<"D: "<<is_trivial<D>;
Output: A: true B: false D: false
ตัวอย่างโค้ด
#include <iostream>
#include <type_traits>
using namespace std;
class TP_1 { };
class TP_2 { TP_2() { } };
class TP_3 : TP_2 { };
class TP_4 { virtual void dummy() { } };
int main() {
cout << boolalpha;
cout << "TP_1: " << is_trivial<TP_1>::value << endl;
cout << "TP_2: " << is_trivial<TP_2>::value << endl;
cout << "TP_3: " << is_trivial<TP_3>::value << endl;
cout << "TP_4: " << is_trivial<TP_4>::value << endl;
return 0;
}
เอาต์พุต
TP_1: true TP_2: false TP_3: false TP_4: false