检查需求值的 C++ 概念
C++ concept that checks a value for requirements
有没有办法使用 c++20s 的概念来检查一个值是否满足某些要求?
假设我正在编写某种使用分页的容器,我想将页面大小作为模板参数。
template<typename Type, std::size_t PageSize>
class container;
我可以使用带有 constexpr 函数的静态断言来检查 PageSize
是否是 class 体内的 2 的幂。
但是有没有办法用新的概念来约束PageSize
?
最简单的方法是限制 class 的模板参数。
constexpr bool is_power_of_two(std::size_t x) { /*... */ }
template<typename Type, std::size_t PageSize>
requires ( is_power_of_two(PageSize) )
class container;
C++20引入std::has_single_bit
判断x
是否为2的整数次幂,所以可以用requires
表达式约束PageSize
.
#include <bit>
template<typename Type, std::size_t PageSize>
requires (std::has_single_bit(PageSize))
class container { };
有没有办法使用 c++20s 的概念来检查一个值是否满足某些要求?
假设我正在编写某种使用分页的容器,我想将页面大小作为模板参数。
template<typename Type, std::size_t PageSize>
class container;
我可以使用带有 constexpr 函数的静态断言来检查 PageSize
是否是 class 体内的 2 的幂。
但是有没有办法用新的概念来约束PageSize
?
最简单的方法是限制 class 的模板参数。
constexpr bool is_power_of_two(std::size_t x) { /*... */ }
template<typename Type, std::size_t PageSize>
requires ( is_power_of_two(PageSize) )
class container;
C++20引入std::has_single_bit
判断x
是否为2的整数次幂,所以可以用requires
表达式约束PageSize
.
#include <bit>
template<typename Type, std::size_t PageSize>
requires (std::has_single_bit(PageSize))
class container { };