小编0xb*_*ann的帖子

Generic way for traversing a C++ std::tuple

My goal is to have a generic way to traverse a std::tuple, and the following code tries to show it:

#include <iostream>
#include <tuple>

template <typename t, size_t t_idx, typename t_tuple>
concept visit_tuple_element_value = requires(t &&p_t, const t_tuple &p_tuple) {
  {
    p_t.template operator()<t_idx>(
        std::declval<std::add_const_t<std::add_lvalue_reference_t<t_tuple>>>())
    } -> std::same_as<bool>;
};

template <typename t_tuple, typename t_function, size_t t_idx = 0>
requires(visit_tuple_element_value<t_function, t_idx, t_tuple>)

    void traverse_tuple_values(t_function p_function, const t_tuple &p_tuple) {
  if constexpr (t_idx < std::tuple_size_v<t_tuple>) {
    if (p_function.template operator()<t_idx>(p_tuple)) {
      traverse_tuple_values<t_tuple, t_function, …
Run Code Online (Sandbox Code Playgroud)

c++ template-meta-programming c++-concepts

2
推荐指数
1
解决办法
112
查看次数