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

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

被折叠的 条评论
为什么被折叠?



