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 类型别名会更顺。

相关:cpp模板偏特化cpp模板元编程入门cpp平凡对象