c++的 Type Traits (一)

Type Traits 是什么意思?Trait 又是什么?

Trait 的字面意思是"特征、特性、特质"。在编程里,它指对"某个类型或对象具备什么性质/能力"的抽象描述。不同语言里这个词的含义差别不小,最常见的是 C++ 的 type traits。

C++ 的 Type Traits

C++ 的 type traits(头文件 <type_traits>)是一组模板类和变量模板,让你在编译期查询、判断、转换类型的特性,是模板元编程和 SFINAE 的基础设施。大致分三类:

  • 判断类 :std::is_integral<T>(T 是整型吗)、std::is_pointer<T>、std::is_same<T, U>、std::is_constructible<T, Args...>
  • 变换类 :std::remove_const<T>、std::add_pointer<T>、std::decay<T>、std::conditional<B, T, U>
  • 辅助工具 :std::enable_if、std::void_t、std::declval

典型用法

根据类型特性选择重载:

cpp 复制代码
#include <type_traits>

template <typename T>
std::enable_if_t<std::is_integral_v<T>, int>   // C++17 写法
f(T x) { return 1; }   // 只有 T 是整型时这个函数才存在

版本演进

  • C++11 :正式引入 <type_traits>(之前是 Boost.TypeTraits / TR1)
  • C++14 :加了 _t 别名(如 enable_if_t)
  • C++17 :加了 _v 变量模板(如 is_integral_v)
  • C++20 :Concepts 在很多场景下取代了 enable_if 的写法

其他语言里的 Trait

语言 Trait 的含义
Rust 定义共享行为的接口(类似 Java interface),同时用作泛型约束,可以带默认方法和关联类型
Scala 类似 Java interface,但可有方法实现和字段,支持 mixin 混入组合
PHP 纯粹的代码复用机制,把一组方法"复制"进使用它的类,解决单继承下的水平复用问题

词源

这个词最早来自 Smalltalk 社区的研究(论文 Traits: Composable Units of Behavior),核心思想一致:把"一组特性/行为"抽出来独立描述,再组合到具体类型上。

C++ 的命名逻辑就是------类型(type)具备的特征(trait)。

相关推荐
别动我齐刘海2 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
Web极客码2 小时前
Python Ollama 本地 Agent 入门与订单查询实践
开发语言·jvm·python
kimnoic2 小时前
PHP 8.2的DNF类型怎么用才规范
开发语言·php
_Evan_Yao2 小时前
前后端联调怎么排查问题?从 Network 到后端日志,一步步定位错误
开发语言·后端·团队开发·需求分析
hudd6682 小时前
JavaEE 初阶 - 多线程(进阶)
java·开发语言·java-ee
小白快快跑哦3 小时前
python-字符串全解(六):正则表达式-前后相断言
开发语言·python·正则表达式·前后相断言
ZZHow10243 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
kimnoic3 小时前
Python数据分析中正则表达式匹配字符串与常用函数示例详解
开发语言·python
中屹指纹浏览器svip3 小时前
打开账号环境网页报错,常见原因有哪些?
服务器·开发语言·php·中屹指纹浏览器