Computer >> Máy Tính >  >> Lập trình >> C ++

mẫu is_scalar trong C ++

Trong bài viết này, chúng ta sẽ thảo luận về cách làm việc, cú pháp và các ví dụ của mẫu std ::is_scalar trong C ++ STL.

is_scalar là một mẫu nằm trong tệp tiêu đề . Mẫu này được sử dụng để kiểm tra xem kiểu T đã cho có phải là kiểu vô hướng hay không

Mẫu này là sự kết hợp của is_arithmetic, is_pointer, is_enum, is_member_pointer hoặc is_same và kiểm tra xem nếu một trong hai là true thì kết quả của is_scalar cũng sẽ đúng.

Kiểu vô hướng trong C ++ là gì?

Kiểu vô hướng là đối tượng không phải là kiểu lớp cũng như kiểu mảng. Kiểu vô hướng là kiểu có chức năng sẵn có cho toán tử bổ sung mà không có bất kỳ quá tải nào.

Cú pháp

template <class T> is_scalar;

Tham số

Mẫu chỉ có thể có tham số kiểu T và kiểm tra xem kiểu đã cho có phải là kiểu vô hướng hay không.

Giá trị trả về

Nó trả về một giá trị Boolean, true nếu kiểu đã cho là kiểu vô hướng và false nếu kiểu đã cho không phải là kiểu vô hướng.

Ví dụ

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

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

Ví dụ

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

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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

Ví dụ

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

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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