Last active
July 14, 2023 07:29
-
-
Save Harold2017/7eb17acdd66838f9073ede4ef8047cb4 to your computer and use it in GitHub Desktop.
compile time aggregate type member visitor function (poor man's reflection in C++17)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Created by Harold on 2023/7/14. | |
// | |
#include "member_visitor.h" | |
#include <cstdint> | |
#include <string> | |
#include <iostream> | |
struct A | |
{ | |
int a; | |
float b; | |
double c; | |
std::string d; | |
int32_t e; | |
int16_t f; | |
bool g; | |
}; | |
using B = std::tuple<int, long, long long, unsigned>; | |
int main() | |
{ | |
auto visitor = [](auto&& ...items) | |
{ | |
((std::cout << std::boolalpha << items << " "), ...); | |
}; | |
A a{}; | |
B b{}; | |
A aa{.a = 1, .c = 0.2, .d = "test", .g = true}; | |
static_assert(std::is_aggregate_v<A>); | |
static_assert(details::is_tuple_v<B>); | |
static_assert(details::struct_member_count<A>::value == 7); | |
static_assert(details::struct_member_count_v<A> == 7); | |
visit_members(a, visitor); | |
visit_members(b, visitor); | |
visit_members(aa, visitor); | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Created by Harold on 2023/7/14. | |
// | |
// reference: https://github.com/alibaba/yalantinglibs/blob/main/include/ylt/struct_pack/reflection.hpp | |
// require C++17 | |
// only works for aggregate type | |
#pragma once | |
#include <cstddef> | |
#include <tuple> | |
#include <type_traits> | |
#include <utility> | |
namespace details | |
{ | |
template <typename> struct is_tuple: std::false_type {}; | |
template <typename ...T> struct is_tuple<std::tuple<T...>>: std::true_type {}; | |
template <typename T> constexpr inline bool is_tuple_v = is_tuple<T>::value; | |
struct any_type | |
{ | |
template <typename T> | |
constexpr operator T(); | |
}; | |
template <typename T, typename ...Ts> | |
decltype(void(T{ { std::declval<Ts>() }... }), std::true_type{}) is_braces_constructible(std::size_t); | |
template <typename, typename ...> | |
std::false_type is_braces_constructible(...); | |
template <typename T, typename ...Ts> | |
constexpr inline bool is_braces_constructible_v = decltype(is_braces_constructible<T, Ts...>(0))::value; | |
template <std::size_t N, typename T, typename ...Ts> | |
struct struct_member_count_impl : public std::conditional_t<is_braces_constructible_v<T, Ts...>, struct_member_count_impl<N + 1, T, any_type, Ts...>, std::integral_constant<std::size_t, N>> {}; | |
template <typename T, typename = std::enable_if_t<std::is_aggregate_v<T>>> | |
using struct_member_count = struct_member_count_impl<0, T, any_type>; | |
template <typename T> | |
constexpr inline std::size_t struct_member_count_v = struct_member_count<T>::value; | |
template <typename T> | |
constexpr std::size_t count_member() | |
{ | |
if constexpr (is_tuple_v<T>) | |
return std::tuple_size_v<T>; | |
else | |
return struct_member_count_v<T>; | |
} | |
} | |
constexpr static auto MaxVisitMembers = 64; | |
template <typename T, typename Visitor> | |
constexpr decltype(auto) inline visit_members(T&& object, Visitor&& visitor) | |
{ | |
using type = std::remove_cv_t<std::remove_reference_t<T>>; | |
constexpr auto Count = details::count_member<type>(); | |
if constexpr (Count == 0 && std::is_class_v<type>) | |
static_assert(!sizeof(T), "empty struct/class is not allowed!"); | |
static_assert(Count <= MaxVisitMembers, "exceed max visit members!"); | |
if constexpr (Count == 0) | |
{ | |
return visitor(); | |
} else if constexpr (Count == 1) | |
{ | |
auto &&[a1] = object; | |
return visitor(a1); | |
} else if constexpr (Count == 2) | |
{ | |
auto &&[a1, a2] = object; | |
return visitor(a1, a2); | |
} else if constexpr (Count == 3) | |
{ | |
auto &&[a1, a2, a3] = object; | |
return visitor(a1, a2, a3); | |
} else if constexpr (Count == 4) | |
{ | |
auto &&[a1, a2, a3, a4] = object; | |
return visitor(a1, a2, a3, a4); | |
} else if constexpr (Count == 5) | |
{ | |
auto &&[a1, a2, a3, a4, a5] = object; | |
return visitor(a1, a2, a3, a4, a5); | |
} else if constexpr (Count == 6) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6] = object; | |
return visitor(a1, a2, a3, a4, a5, a6); | |
} else if constexpr (Count == 7) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7); | |
} else if constexpr (Count == 8) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8); | |
} else if constexpr (Count == 9) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9); | |
} else if constexpr (Count == 10) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); | |
} else if constexpr (Count == 11) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); | |
} else if constexpr (Count == 12) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); | |
} else if constexpr (Count == 13) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13] = | |
object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); | |
} else if constexpr (Count == 14) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14] = | |
object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14); | |
} else if constexpr (Count == 15) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15); | |
} else if constexpr (Count == 16) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16); | |
} else if constexpr (Count == 17) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17); | |
} else if constexpr (Count == 18) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18); | |
} else if constexpr (Count == 19) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19); | |
} else if constexpr (Count == 20) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20); | |
} else if constexpr (Count == 21) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21); | |
} else if constexpr (Count == 22) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22); | |
} else if constexpr (Count == 23) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); | |
} else if constexpr (Count == 24) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); | |
} else if constexpr (Count == 25) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25); | |
} else if constexpr (Count == 26) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26] = | |
object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26); | |
} else if constexpr (Count == 27) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, | |
a27] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27); | |
} else if constexpr (Count == 28) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28); | |
} else if constexpr (Count == 29) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29); | |
} else if constexpr (Count == 30) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30); | |
} else if constexpr (Count == 31) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31); | |
} else if constexpr (Count == 32) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32); | |
} else if constexpr (Count == 33) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33); | |
} else if constexpr (Count == 34) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34); | |
} else if constexpr (Count == 35) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35); | |
} else if constexpr (Count == 36) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36); | |
} else if constexpr (Count == 37) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37); | |
} else if constexpr (Count == 38) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38); | |
} else if constexpr (Count == 39) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39] = | |
object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39); | |
} else if constexpr (Count == 40) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, | |
a40] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40); | |
} else if constexpr (Count == 41) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41); | |
} else if constexpr (Count == 42) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42); | |
} else if constexpr (Count == 43) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43); | |
} else if constexpr (Count == 44) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44); | |
} else if constexpr (Count == 45) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45); | |
} else if constexpr (Count == 46) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46); | |
} else if constexpr (Count == 47) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47); | |
} else if constexpr (Count == 48) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48); | |
} else if constexpr (Count == 49) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49); | |
} else if constexpr (Count == 50) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50); | |
} else if constexpr (Count == 51) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51); | |
} else if constexpr (Count == 52) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52] = | |
object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52); | |
} else if constexpr (Count == 53) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, | |
a53] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53); | |
} else if constexpr (Count == 54) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54); | |
} else if constexpr (Count == 55) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55); | |
} else if constexpr (Count == 56) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56); | |
} else if constexpr (Count == 57) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57); | |
} else if constexpr (Count == 58) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58); | |
} else if constexpr (Count == 59) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59); | |
} else if constexpr (Count == 60) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59, a60] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59, a60); | |
} else if constexpr (Count == 61) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59, a60, a61] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59, a60, a61); | |
} else if constexpr (Count == 62) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59, a60, a61, a62] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59, a60, a61, a62); | |
} else if constexpr (Count == 63) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59, a60, a61, a62, a63] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59, a60, a61, a62, a63); | |
} else if constexpr (Count == 64) | |
{ | |
auto &&[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, | |
a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, | |
a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, | |
a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, | |
a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64] = object; | |
return visitor(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, | |
a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, | |
a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, | |
a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, | |
a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, | |
a58, a59, a60, a61, a62, a63, a64); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Implemented with
aggregate initialization
+structure binding
.