<type_traits>

類模板
<type_traits>

std::is_empty

template <class T> struct is_empty;
空類 (Is empty class)

識別 T 是否為空類的特性類。

一個空類是類,它不儲存任何資料,無論是否經過 cv 限定。
is_empty識別所有滿足以下所有條件的類(以struct宣告,但不是聯合體
  • 沒有非靜態成員(零長度的位域除外),
  • 沒有虛擬函式或虛基類,並且
  • 沒有基類,對於該基類is_emptyfalse_type

is_empty繼承自integral_constant,其值為true_typefalse_type,取決於T是否為空型別。

模板引數

T
一個完整型別,或者void(可能的 cv 限定),或未知界限的完整元素型別的陣列。
一個型別。
如果是類型別,它必須是一個完整型別或一個聯合體(對於聯合體,此特性類始終為 false)。

成員型別

繼承自 integral_constant
成員型別定義
value_typebool
型別true_type 或 false_type

成員常量

繼承自 integral_constant
成員常量定義
truefalse

成員函式

繼承自 integral_constant

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// is_empty example
#include <iostream>
#include <type_traits>

struct A { };
struct B { void fn(){} };
struct C { int x; };

int main() {
  std::cout << std::boolalpha;
  std::cout << "is_empty:" << std::endl;
  std::cout << "int: " << std::is_empty<int>::value << std::endl;
  std::cout << "A: " << std::is_empty<A>::value << std::endl;
  std::cout << "B: " << std::is_empty<B>::value << std::endl;
  std::cout << "C: " << std::is_empty<C>::value << std::endl;
  return 0;
}

輸出
is_empty:
int: false
A: true
B: true
C: false


另見