小编Hon*_*y.W的帖子

为什么`fmt/core.h`中的`count()`函数重载是这样实现的?

在 中fmt/core.h,我注意到该函数使用带有给定谓词的count_named_args()模板函数。count

我发现版本的重载版本count很奇怪:

template <bool B1, bool B2, bool... Tail> constexpr auto count() -> size_t {
  return (B1 ? 1 : 0) + count<B2, Tail...>();
}
Run Code Online (Sandbox Code Playgroud)

为什么我们需要使用模板参数bool B2来显式提取下一个布尔值,而不是直接使用参数包bool... Tail

如果我删除这些bool B2内容,然后尝试编译:

template <bool B1, bool... Tail> constexpr auto count() -> size_t {
  return (B1 ? 1 : 0) + count<Tail...>();
}
Run Code Online (Sandbox Code Playgroud)
static_assert(count<false>() == 0);
static_assert(count<true, false>() == 1);
Run Code Online (Sandbox Code Playgroud)

当参数数量减少到最后一个时,它会给出一个错误,因为确定重载是不明确的:

size_t count<false,>(void) noexcept
size_t count<false>(void) noexcept
Run Code Online (Sandbox Code Playgroud)

c++ fmt

4
推荐指数
1
解决办法
161
查看次数

标签 统计

c++ ×1

fmt ×1