kumi v3.1.0
Exquisite Epidote
 
Loading...
Searching...
No Matches

◆ flatten_all()

template<product_type T, typename Func >
constexpr auto kumi::flatten_all ( T &&  t,
Func &&  f 
)
inlineconstexpr

Recursively converts a product type of product types into a product type of all elements.

Recursively converts a product type of product types t into a product type of all elements of said product types.

If the Callable object f is provided, non-product type elements are processed by f before being inserted.

Note
There is a semantic difference between record and tuples flattening.
Parameters
tProduct type to flatten
fOptional Callable object to apply when a sub-tuple is flattened
Returns
A tuple composed of all elements of t flattened recursively

Helper type

namespace kumi::result
{
template<product_type T, typename Func = void> struct flatten_all;
template<product_type T, typename Func = void>
using flatten_all_t = typename flatten_all<T, Func>::type;
}
constexpr auto flatten_all(T &&t, Func &&f)
Recursively converts a product type of product types into a product type of all elements.
Definition flatten.hpp:171

Computes the return type of a call to kumi::flatten_all

Example

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
auto nbrs = kumi::tuple{1,2ULL,3};
auto more_nbrs = kumi::tuple{short{0},nbrs,4.};
auto ltrs = kumi::tuple{'a','b','c'};
auto r = kumi::flatten_all( kumi::tuple{3.5,nbrs,'z',more_nbrs,5.35f,ltrs} );
std::cout << r << "\n";
auto sz = kumi::flatten_all ( kumi::tuple{3.5,nbrs,'z',more_nbrs,5.35f,ltrs}
, [](auto e) { return sizeof(e); }
);
std::cout << sz << "\n";
}
Fixed-size collection of heterogeneous values.
Definition tuple.hpp:37