KUMI v4.0.0
Flawless Fluorite
Loading...
Searching...
No Matches

◆ as_flat_ptr

as_flat_ptr_t kumi::as_flat_ptr {}
inlineconstexprnodiscard

Callable object converting recursively a product type of product types into a flat product type of pointers to each of its components.

On record types, the names of the outer record are concatenated to the inner ones ultimately constructing names such as "outer.inner". If the input is a product type containing record types or vice versa only the inner types matching the outer semantic will be flattened. Thus a record inside a tuple will not be flattened.

inline constexpr

Header file

#include <kumi/algorithm/flatten.hpp>

Call Signature

template<product_type T>
constexpr auto as_flat_ptr(T && t) noexcept;
constexpr as_flat_ptr_t as_flat_ptr
Callable object converting recursively a product type of product types into a flat product type of po...
Definition flatten.hpp:364

Parameters

  • t: Product type to process

Return value

  • A flat product type composed of pointers to each elements of t.

Helper type

template<kumi::concepts::product_type T> struct as_flat_ptr
{
using type = decltype(kumi::as_flat_ptr(std::declval<T>()));
};
template<kumi::concepts::product_type T> using as_flat_ptr_t = typename kumi::result::as_flat_ptr<T>::type;

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

Examples

Tuple

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
kumi::tuple a = { 1, kumi::tuple{ 2.3, 4.5f }, short{89} };
auto ptr = kumi::as_flat_ptr(a);
std::cout << a << "\n";
std::cout << ptr << "\n";
kumi::for_each([](auto p) { *p += 5; }, ptr );
std::cout << a << "\n";
}
constexpr for_each_t for_each
Callable object applying the Callable object f on each element of a product type.
Definition for_each.hpp:126
Fixed-size collection of heterogeneous values.
Definition tuple.hpp:33

Record

#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
using namespace kumi::literals;
kumi::record a = { "a"_id = 1, "b"_id =
kumi::record{ "c"_id = 2.3, "d"_id = 4.5f }, "e"_id = short{89} };
auto ptr = kumi::as_flat_ptr(a);
std::cout << a << "\n";
std::cout << ptr << "\n";
kumi::for_each([](auto p) { *p += 5; }, ptr );
std::cout << a << "\n";
}
Fixed-size collection of heterogeneous tagged fields, tags are unique.
Definition record.hpp:36