检查需求值的 C++ 概念

Sym*_*ink 3 c++ c++-concepts c++20

有没有办法使用 c++20s 概念来检查值是否满足某些要求?

假设我正在编写某种使用分页的容器,并且我想让页面大小成为模板参数。

template<typename Type, std::size_t PageSize>
class container;
Run Code Online (Sandbox Code Playgroud)

我可以使用带有 constexpr 函数的静态断言来检查PageSize类体内是否为 2 的幂。

但有没有办法用新观念来约束呢PageSize

康桓瑋*_*康桓瑋 7

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 { };
Run Code Online (Sandbox Code Playgroud)

演示