泛型 concept —— 之 使用标准库 Concept
C++20 标准库在 <concepts> 头文件中提供了大量预定义 Concept,建议优先使用它们:
| Concept | 含义 |
|---|---|
std::integral<T> |
整数类型 |
std::floating_point<T> |
浮点类型 |
std::same_as<T, U> |
T 和 U 是同一类型 |
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;
}

浙公网安备 33010602011771号