Callable object extracting a sub product type from a product type.
On record types, this function operates on elements as if they were ordered. The considered order is the order of declaration.
- Note
- This function will issue a compile time error if I0 and I1 do not verify that 0 <= I0 <= I1 <= size_v<T>.
#include <kumi/algorithm/extract.hpp>
template<product_type T, std::size_t I0, std::size_t I1>
constexpr extract_t extract
Callable object extracting a sub product type from a product type.
Definition extract.hpp:140
Integral constant type.
Definition ct_helpers.hpp:32
template<product_type T, std::size_t I0>
- t: Product Type to extract elements from
- i0: Compile-time index of the first element to extract
- i1: Compile-time index past the last element to extract
- 1. A new product type containing the selected range of elements of t.
- 2. A new product type containing the selected elements of t using size_v<T> as the last index.
template<kumi::concepts::product_type T, std::size_t I0, std::size_t I1 = std::size_t(-1)>
struct extract
{
using type =
decltype(
kumi::extract(std::declval<T>(), kumi::index_t<I0>{}, kumi::index_t<I1>{}));
};
template<kumi::concepts::product_type T, std::
size_t I0>
struct extract<T, I0>
{
using type =
decltype(
kumi::extract(std::declval<T>(), kumi::index_t<I0>{}));
};
template<kumi::concepts::product_type T, std::size_t I0, std::size_t I1 = std::size_t(-1)>
using extract_t = typename kumi::result::extract<T, I0, I1>::type;
Computes the return type of a call to kumi::extract
#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
using namespace kumi::literals;
std::cout << a << " => " << head << ' ' << mid << ' ' << last << '\n';
}
constexpr kumi::index_t< N > const index
Inline integral constant value for kumi::index_t.
Definition ct_helpers.hpp:49
Fixed-size collection of heterogeneous values.
Definition tuple.hpp:33
#include <kumi/kumi.hpp>
#include <iostream>
int main()
{
using namespace kumi::literals;
kumi::record a = {
"a"_id = 1,
"b"_id = 2.3,
"c"_id = 4.5f,
"d"_id =
'6'
, "e"_id = "7", "f"_id = short{89} };
std::cout << a << " => " << head << ' ' << mid << ' ' << last << '\n';
}
Fixed-size collection of heterogeneous tagged fields, tags are unique.
Definition record.hpp:36