c++ - 概念 - 如何约束积分模板值
问题描述
有一个模板定义,如:
template<size_t N>
void foo( void ) {
/* ... */
}
如何定义一个N
必须为非零正值(N >= 1)的概念?
就像是:
template<size_t N>
concept NonZeroSize = /* to be implemented, N>=1 */
template<NonZeroSize N>
void foo( void ) {
/* Do whatever only if N >= 1 */
}
谢谢!
解决方案
像这样:
template <size_t N> requires NonZeroSize<N>
void foo();
要不就:
template <size_t N> requires (N > 0)
void foo();
简洁形式是为类型概念保留的。
概念定义本身只是一个任意的布尔表达式:
template <size_t N>
concept NonZeroSize = (N > 0);
requires-expression只是一种特殊的表达式,在定义概念时非常有用,但它既不必在所有概念定义中使用,也不必出现在概念定义中。这些东西是正交的。
推荐阅读
- javascript - 无法在 react-native 0.63.4 (Android) 中发出任何网络请求(获取)
- r - if else 循环创建一个新的分类变量
- python - 如何使用 Selenium 和 Python 按类识别元素?
- ruby-on-rails - Rails 引擎中的关联不起作用
- html - 如何在使用 css 转换(平移或/和缩放)和浮点值时修复“边框周围的边框”错误?
- node.js - JSON Web Token (JWT) 太长无法通过客户端 URL?Node.js 和 Express 身份验证
- vue.js - 如何在应用程序之间传递 Vue 3 中的 createApp?
- reactjs - 由于来自本地存储的路径,图像不会在 ReactJS 中显示
- html - 引导列和 justify-content-end
- spring - 如何为谓词设置连接