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

เทมเพลต is_scalar ใน C++


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

is_scalar เป็นเทมเพลตที่อยู่ภายใต้ไฟล์ส่วนหัว เทมเพลตนี้ใช้เพื่อตรวจสอบว่าประเภท T ที่กำหนดเป็นประเภทสเกลาร์หรือไม่

เทมเพลตนี้เป็นการรวมกันของ is_arithmetic, is_pointer, is_enum, is_member_pointer หรือ is_same และตรวจสอบว่าค่าใดค่าหนึ่งเป็นจริง ผลลัพธ์ของ is_scalar จะเป็นจริงด้วย

ประเภทสเกลาร์ใน C++ คืออะไร

ประเภทสเกลาร์คือวัตถุที่ไม่ใช่ประเภทคลาสหรือประเภทอาร์เรย์ ประเภทสเกลาร์เป็นประเภทที่มีฟังก์ชันในตัวสำหรับตัวดำเนินการเพิ่มเติมโดยไม่มีการโอเวอร์โหลด

ไวยากรณ์

template <class T> is_scalar;

พารามิเตอร์

เทมเพลตสามารถมีได้เฉพาะพารามิเตอร์ประเภท T และตรวจสอบว่าประเภทที่กำหนดเป็นประเภทสเกลาร์หรือไม่

คืนค่า

ส่งคืนค่าบูลีนเป็นค่าจริงหากประเภทที่กำหนดเป็นประเภทสเกลาร์ และเป็นเท็จหากประเภทที่กำหนดไม่ใช่ประเภทสเกลาร์

ตัวอย่าง

Input: is_scalar<int>::value;
Output: True

Input: is_scalar<A>::value; //assuming A is an object of a class.
Output: False

ตัวอย่าง

#include <iostream>
#include <type_traits>
using namespace std;
int main() {
   class TP {
   };
   cout << boolalpha;
   cout << "checking for is_scalar: ";
   cout << "\nint(TP::*): "<< is_scalar<int(TP::*)>::value;
   cout << "\nint *: "<< is_scalar<int*>::value;
   cout << "\nbool: "<< is_scalar<bool>::value;
   cout << "\nint(int): "<< is_scalar<int(int)>::value;
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

checking for is_scalar:
int(TP::*): true
int *: true
bool: true
int(int): false

ตัวอย่าง

#include <iostream>
#include <type_traits>
using namespace std;
int main() {
   class TP {
   };
   enum class TP_1 {
      var_1,
      var_2,
      var_3,
      var4
   };
   cout << boolalpha;
   cout << "checking for is_scalar: ";
   cout << "\nTP : "<< is_scalar<int(TP)>::value;
   cout << "\nTP_1: "<< is_scalar<TP_1>::value;
   cout << "\nint[10] "<< is_scalar<int[10]>::value;
   cout << "\nint&: "<< is_scalar<int&>::value;
   cout << "\nchar&: "<< is_scalar<char&>::value;
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

checking for is_scalar:
TP : false
TP_1: true
int[10] false
int&: false
char&: false