1.1 std::is_function
std::is_function 是一个模板类,用于检查一个类型是否为函数类型。
定义:
template< class T >
struct is_function;
当 T 为函数类型则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
int myFunction() { return 0; }
int main() {
std::cout << std::boolalpha;
std::cout << "myFunction is " << std::is_function<decltype(myFunction)>::value << '\n'; // 输出 true
std::cout << "int is " << std::is_function<int>::value << '\n'; // 输出 false
return 0;
}
1.2 std::is_class
std::is_class 是一个模板类,用于检查一个类型是否为类类型(不包括联合体)。
定义:
template< class T >
struct is_class;
当 T 为类类型(不包括联合体)则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
struct MyClass {};
union MyUnion {};
int main() {
std::cout << std::boolalpha;
std::cout << "MyClass is " << std::is_class<MyClass>::value << '\n'; // 输出 true
std::cout << "MyUnion is " << std::is_class<MyUnion>::value << '\n'; // 输出 false
std::cout << "int is " << std::is_class<int>::value << '\n'; // 输出 false
return 0;
}
1.3 std::is_union
std::is_union 是一个模板类,用于检查一个类型是否为联合体(union)类型。
定义:
template< class T >
struct is_union;
当 T 为联合体类型则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
struct MyClass {};
union MyUnion {};
int main() {
std::cout << std::boolalpha;
std::cout << "MyClass is " << std::is_union<MyClass>::value << '\n'; // 输出 false
std::cout << "MyUnion is " << std::is_union<MyUnion>::value << '\n'; // 输出 true
std::cout << "int is " << std::is_union<int>::value << '\n'; // 输出 false
return 0;
}
1.4 std::is_enum
std::is_enum 是一个模板类,用于检查一个类型是否为枚举类型。
定义:
template< class T >
struct is_enum;
当 T 为枚举类型则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
enum MyEnum { ENUM_VALUE };
int main() {
std::cout << std::boolalpha;
std::cout << "MyEnum is " << std::is_enum<MyEnum>::value << '\n'; // 输出 true
std::cout << "int is " << std::is_enum<int>::value << '\n'; // 输出 false
return 0;
}
1.5 std::is_member_function_pointer
std::is_member_function_pointer 是一个模板类,用于检查一个类型是否为成员函数指针类型。
定义:
template< class T >
struct is_member_function_pointer;
当 T 为为成员函数指针类型则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
struct MyClass {
void myMemberFunction() {}
};
int main() {
std::cout << std::boolalpha;
std::cout << "Pointer to member function is "
<< std::is_member_function_pointer<void (MyClass::*)()>::value << '\n'; // 输出 true
std::cout << "Pointer to data member is "
<< std::is_member_function_pointer<int (MyClass::*)>::value << '\n'; // 输出 false
std::cout << "int is " << std::is_member_function_pointer<int>::value << '\n'; // 输出 false
return 0;
}
1.6 std::is_member_object_pointer
std::is_member_object_pointer 是一个模板类,用于检查一个类型是否为成员对象指针类型。
定义:
template< class T >
struct is_member_object_pointer;
当 T 为成员对象指针类型则为 true,否则为 false。
样例:
#include <iostream>
#include <type_traits>
struct MyClass {
int myMemberVariable;
};
int main() {
std::cout << std::boolalpha;
std::cout << "Pointer to member object is "
<< std::is_member_object_pointer<int (MyClass::*)>::value << '\n'; // 输出 true
std::cout << "Pointer to member function is "
<< std::is_member_object_pointer<void (MyClass::*)()>::value << '\n'; // 输出 false
std::cout << "int is " << std::is_member_object_pointer<int>::value << '\n'; // 输出 false
return 0;
}