泛型 concept —— 之 使用标准库 Concept

C++20 标准库在 <concepts> 头文件中提供了大量预定义 Concept,建议优先使用它们:

Concept 含义
std::integral<T> 整数类型
std::floating_point<T> 浮点类型
std::same_as<T, U> TU 是同一类型
std::derived_from<T, Base> T 派生自 Base
std::convertible_to<T, U> T 能隐式转换为 U
std::totally_ordered<T> 支持 <, >, <=, >= 等比较
std::copyable<T> 可拷贝构造和拷贝赋值
std::movable<T> 可移动构造和移动赋值
std::regular<T> 可拷贝、可移动、可比较相等
std::invocable<F, Args...> 可调用对象 F 可以用参数 Args... 调用

#include <iostream>
#include <concepts>

// 直接使用标准库中的 std::integral 约束
template<std::integral T>
T add(T a, T b) {
   return a + b;
}

int main() {
   std::cout << add(3, 5) << '\n';       // OK,int 是整数
   // std::cout << add(3.14, 2.71);      // 编译错误:double 不是整数
   return 0;
}

posted @ 2026-08-14 17:57  长松入霄汉远望不盈尺  阅读(9)  评论(0)    收藏  举报