cpp类型萃取
内容简介
类型萃取是编译期查询和处理类型信息的技术。标准库 <type_traits> 提供了大量工具,例如判断一个类型是否是指针、是否可拷贝、是否平凡复制等。
它是模板元编程、泛型库和现代 C++ 约束系统的重要基础。
示例
#include <type_traits>
static_assert(std::is_pointer<int*>::value);
static_assert(!std::is_pointer<int>::value);C++17 起常用 _v 简写:
#include <type_traits>
static_assert(std::is_pointer_v<int*>);常见工具
| 工具 | 含义 |
|---|---|
std::is_pointer_v<T> | 是否是指针 |
std::is_reference_v<T> | 是否是引用 |
std::is_const_v<T> | 是否是 const 类型 |
std::is_trivially_copyable_v<T> | 是否可平凡复制 |
std::remove_reference_t<T> | 移除引用 |
std::remove_const_t<T> | 移除 const |
常见用法
#include <type_traits>
template <typename T>
void print_kind()
{
if constexpr (std::is_pointer_v<T>) {
// 指针类型分支
} else {
// 非指针类型分支
}
}注意事项
- 类型萃取发生在编译期,不是运行期反射。
- 能用标准库
<type_traits>就不要自己手写复杂判断。 - 学类型萃取前,先掌握模板、偏特化和
using类型别名会更顺。