Kaspersky Neuromorphic Platform  1.0.0
API Reference
Loading...
Searching...
No Matches
variant_helpers.h
Go to the documentation of this file.
1
22#pragma once
23
24#include <string>
25#include <variant>
26#include <vector>
27
28#include <boost/mp11.hpp>
29
30
34namespace knp::meta
35{
36
46template <typename SupportedTypes, typename AllVariants, typename ToContainer>
47void load_from_container(const std::vector<AllVariants> &from_container, ToContainer &to_container)
48{
49 to_container.clear();
50 to_container.reserve(from_container.size());
51
52 for (const auto &p : from_container)
53 {
54 std::visit(
55 [&to_container](auto &arg)
56 {
57 using T = std::decay_t<decltype(arg)>;
58 if constexpr (boost::mp11::mp_find<SupportedTypes, T>{} != boost::mp11::mp_size<SupportedTypes>{})
59 {
60 to_container.push_back(typename ToContainer::value_type{arg});
61 }
62 },
63 p);
64 }
65}
66
67
73template <class... FromArgs>
75{
79 std::variant<FromArgs...> v;
85 template <class... ToArgs>
86 operator std::variant<ToArgs...>() const
87 {
88 return std::visit([](auto &&arg) -> std::variant<ToArgs...> { return arg; }, v);
89 }
90};
91
92
100template <class... Args>
101static auto variant_cast(const std::variant<Args...> &v) -> variant_cast_proxy<Args...>
102{
103 return {v};
104}
105
106} // namespace knp::meta
Metaprogramming library namespace.
void load_from_container(const std::vector< AllVariants > &from_container, ToContainer &to_container)
Load elements from one container of all variants to another container that contains a subset of all v...
Convert from one set of arguments to another.
std::variant< FromArgs... > v
Buffer variable.