检查需求值的 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 { };

Demo