std::decay_t
是 C++14 中引入的一个类型转换工具,位于
头文件中。它用于在某些上下文中获取一个类型的衰减(decay)类型,即移除引用、数组和函数类型,得到原始类型。
#include
#include
template <typename T>
void printType() {
// 使用 std::decay_t 获取衰减后的类型
using DecayType = std::decay_t<T>;
std::cout << "Original type: " << typeid(T).name() << std::endl;
std::cout << "Decayed type: " << typeid(DecayType).name() << std::endl;
}
int main() {
printType<int>(); // 原始类型是 int,衰减后的类型也是 int
printType<int&>(); // 原始类型是 int&,衰减后的类型是 int
printType<const int[]>(); // 原始类型是 const int[],衰减后的类型是 const int*
printType<void(int)>(); // 原始类型是 void(int),衰减后的类型是 void(*)(int)
return 0;
}
移除引用: 如果输入类型是引用,std::decay_t
会移除引用,返回基础类型。
数组转指针: 如果输入类型是数组,std::decay_t
会将数组转换为指向数组元素类型的指针。
函数转函数指针: 如果输入类型是函数类型,std::decay_t
会将其转换为相应的函数指针类型。
template <typename T>
struct Example {
using DecayType = std::decay_t<T>;
DecayType process(T value) {
// 在这里可以使用 DecayType 进行处理
return value;
}
};
总的来说,std::decay_t
是一个非常方便的工具,可以在编写泛型代码时帮助处理模板参数的类型,使代码更具通用性和可维护性。