简单来说,concept就是用来限制泛型的类型。常见有5种用法:
template<typename T>
concept Integral = std::is_integral<T>::value;
这段代码定义了一个概念(Concept) Integral ,用于对传入的类型进行判断,判断其是否为整型类型。其中 std::is_integral<T>::value
是一个C++类型特性(Type Trait),用于判断类型T是否为整型类型。如果T为整型类型,那么 std::is_integral<T>::value
的值为 true ,否则为 false 。该概念可以用于限定模板类型参数T必须为整型类型,例如:
template <Integral T>
void foo(T x) {
// ...
}
在调用 foo 函数时,如果传入的实参不是整型类型,则会在编译期间产生错误。
用法一
Integral auto Add(Integral auto a, Integral auto b)
{
return a + b;
}
用法二
template<typename T>
requires Integral<T>
T Add(T a, T b)
{
return a + b;
}
用法三
template<typename T>
T Add(T a, T b) requires Integral<T>
{
return a + b;
}
用法四
template<Integral T>
T Add(T a, T b)
{
return a + b;
}
用法五
Integral{T}
T Add(T a, T b)
{
return a + b;
}
网友评论