АР
p.s. (*this).Bar() =)
Size: a a a
АР
АР
AN
AN
CD
CD
CD
ST
template<size_t
Index = 0, typename TTuple, size_t
Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
if constexpr (
Index <
Size) {
std::invoke(callable, args..., std::get<
Index>(tuple));
if constexpr (
Index + 1 <
Size) {
for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
}
}
}
FZ
template<size_t
Index = 0, typename TTuple, size_t
Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
if constexpr (
Index <
Size) {
std::invoke(callable, args..., std::get<
Index>(tuple));
if constexpr (
Index + 1 <
Size) {
for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
}
}
}
brigand::for_each<brigand::reverse<std::tuple<....>>>(...), можно посмотреть https://github.com/edouarda/brigand/
FZ
template<size_t
Index = 0, typename TTuple, size_t
Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
if constexpr (
Index <
Size) {
std::invoke(callable, args..., std::get<
Index>(tuple));
if constexpr (
Index + 1 <
Size) {
for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
}
}
}
AN
CD
AN
..
AN
AN
..
IZ
AP
AP