From 1269cc5023bce875d4bb69ef9de082990e061265 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sat, 27 May 2023 20:15:39 +0200 Subject: c++: Added more template support --- src/codec/data.h | 10 ++++++++-- src/core/templates.h | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/codec/data.h b/src/codec/data.h index 442fa26..f9bf31d 100644 --- a/src/codec/data.h +++ b/src/codec/data.h @@ -79,8 +79,14 @@ private: std::tuple...> value_; public: template - data& get(){ - return std::get::value>(value_); + data< + parameter_pack_type< + parameter_pack_index< + literal, literals... + >::value + , T...>::type + , encode::Native>& get(){ + return std::get::value>(value_); } constexpr size_t size() const { diff --git a/src/core/templates.h b/src/core/templates.h index 833bb5b..c363a16 100644 --- a/src/core/templates.h +++ b/src/core/templates.h @@ -13,4 +13,17 @@ struct parameter_pack_index { static constexpr size_t value = 1u + parameter_pack_index::value; }; + +template struct parameter_pack_type; + +template struct parameter_pack_type<0, TN, T...> { + using type = TN; +}; + +template +struct parameter_pack_type { + static_assert(sizeof...(T) > 0, "Exhausted parameters"); + using type = typename parameter_pack_type::type; +}; + } -- cgit v1.2.3