C++20 Concepts 模版约束概念

本文介绍C++20中Concepts特性如何简化模版类型约束,替代繁琐的std::enable_if。Concepts允许直接在模版参数上设定条件,如integral和pointer_integral,以及使用requires定义更复杂的约束表达式。

 

C++20以前,模版类型约束只能通过std::enable_if、std::enable_if_t来实现。然而,std::enable_if真的是又臭又长,而且每新定义一个都要重写一遍。直接给予模版编写者极差的使用体验。

Concepts引入之后,完美解决了std::enable_if又臭又长还得反复编写的问题。

先看下新引入的关键字:

  • concept

C++20以前,当你想定义只针对整形的模版函数,你也许会这么写:

template <typename T>
auto mod(std::enable_if_t<std::is_integral_v<T>, T> d)
{
    return d % 10;
}

这样子调用

mod<int>(189);

现在你可以使用concept来约束模版类型

template <class T>
concept integral = std::is_integral_v<T>;

template <integral T>
auto mod(T d)
{
    return d % 10;
}

调用方式一样

mod<int>(189);

或者这样也行

mod(189);
  • 多个concept​​​​​​​结合

concept可以把多个约束结合起
定义一个指针与整形的约束:
template <typename T>
concept point
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值