C++ 标准库 <type_traits>
C++ 标准库
是否是整数类型
是否是浮点类型
是否是指针类型
是否是引用类型
是否是可调用的(函数或函数指针)
语法
以下是一些常用的 type_traits 功能:
基本类型判断:
std::is_void
std::is_integral
std::is_floating_point
std::is_array
std::is_pointer
std::is_reference
std::is_const
类型修饰:
std::remove_const
std::remove_volatile
std::remove_cv
std::remove_reference
std::remove_pointer
类型转换:
std::add_const
std::add_volatile
std::add_cv
std::add_pointer
std::add_lvalue_reference
std::add_rvalue_reference
类型特性检测:
std::is_same<T, U>: 判断类型 T 和 U 是否相同。
std::is_base_of<Base, Derived>: 判断类型 Base 是否为类型 Derived 的基类。
std::is_convertible<From, To>: 判断类型 From 是否能转换为类型 To。
条件类型:
std::conditional<Condition, T, F>: 如果 Condition 为 true,则类型为 T,否则为 F。
std::enable_if<Condition, T>: 如果 Condition 为 true,则类型为 T,否则此模板不参与重载决议。
实例
以下是一些使用
检查是否是整数类型
实例
#include
#include
int main() {
std::cout << “int is integral: “ << std::is_integral
std::cout << “float is integral: “ << std::is_integral
std::cout << “char is integral: “ << std::is_integral
return 0;
}
输出结果:
int is integral: 1
float is integral: 0
char is integral: 1
检查是否是浮点类型
实例
#include
#include
int main() {
std::cout << “int is floating_point: “ << std::is_floating_point
std::cout << “float is floating_point: “ << std::is_floating_point
std::cout << “double is floating_point: “ << std::is_floating_point
return 0;
}
输出结果:
int is floating_point: 0
float is floating_point: 1
double is floating_point: 1
检查是否是指针类型
实例
#include
#include
int main() {
int a = 10;
int* p = &a;
std::cout << “int* is a pointer: “ << std::is_pointer<int*>::value << std::endl;
std::cout << “int is a pointer: “ << std::is_pointer
return 0;
}
输出结果:
int* is a pointer: 1
int is a pointer: 0
检查是否是引用类型
实例
#include
#include
int main() {
int a = 10;
int& ref = a;
std::cout << “int& is a reference: “ << std::is_reference<int&>::value << std::endl;
std::cout << “int is a reference: “ << std::is_reference
return 0;
}
输出结果:
int& is a reference: 1
int is a reference: 0
检查是否是可调用的
实例
#include
#include
#include
void func() {}
int main() {
std::cout << “int is callable: “ << std::is_callable
std::cout << “void() is callable: “ << std::is_callable<void()>::value << std::endl;
std::cout << “func is callable: “ << std::is_callable<decltype(func)>::value << std::endl;
return 0;
}
输出结果:
int is callable: 0
void() is callable: 1
func is callable: 1