File tuple_conversion.hpp¶
File List > backends > cxx > include > zmbt > core > tuple_conversion.hpp
Go to the documentation of this file
#ifndef ZMBT_CORE_TUPLE_CONVERSION_HPP_
#define ZMBT_CORE_TUPLE_CONVERSION_HPP_
#include <tuple>
#include <type_traits>
#include "aliases.hpp"
namespace zmbt {
namespace detail {
template <class T, class... A>
struct tuple_conversion_handler {
T target;
tuple_conversion_handler(tuple<A...>& source) : tuple_conversion_handler{source, std::make_index_sequence<sizeof...(A)>()}
{
}
private:
template <size_t... I>
tuple_conversion_handler(tuple<A...>& source, std::index_sequence<I...>)
// TODO: refactor with static_cast
: target{std::get<I>(source)...}
{
}
};
} // namespace detail
template <class T, class... A>
inline T convert_tuple_to(tuple<A...> &source) {
return detail::tuple_conversion_handler<T, A...> (source).target;
}
} // namespace zmbt
#endif // ZMBT_CORE_TUPLE_CONVERSION_HPP_