diff options
author | Antony Woods <acron1@gmail.com> | 2014-10-23 18:33:03 +0100 |
---|---|---|
committer | Antony Woods <acron1@gmail.com> | 2014-10-23 18:33:03 +0100 |
commit | 27bf11d35c8ce44fd9fef656e2975712846b9bb2 (patch) | |
tree | 7005bb1a5227983464e9a89fb7a381000ce7bb74 /include/utility.h | |
parent | a5fab23f70e6e33c633ba4b646a41d0851169ad1 (diff) | |
download | crow-27bf11d35c8ce44fd9fef656e2975712846b9bb2.tar.gz crow-27bf11d35c8ce44fd9fef656e2975712846b9bb2.zip |
Re-implemented 'get_middleware()' as suggested, without changing the Server constructor and now no longer encountering hangs
Diffstat (limited to 'include/utility.h')
-rw-r--r-- | include/utility.h | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/include/utility.h b/include/utility.h index c910eb2..835fdbd 100644 --- a/include/utility.h +++ b/include/utility.h @@ -293,5 +293,45 @@ template <typename F, typename Set> struct empty_context { }; - } + + } // namespace black_magic + + namespace detail + { + + template <class T, std::size_t N, class... Args> + struct get_index_of_element_from_tuple_by_type_impl + { + static constexpr auto value = N; + }; + + template <class T, std::size_t N, class... Args> + struct get_index_of_element_from_tuple_by_type_impl<T, N, T, Args...> + { + static constexpr auto value = N; + }; + + template <class T, std::size_t N, class U, class... Args> + struct get_index_of_element_from_tuple_by_type_impl<T, N, U, Args...> + { + static constexpr auto value = get_index_of_element_from_tuple_by_type_impl<T, N + 1, Args...>::value; + }; + + } // namespace detail + + namespace utility + { + template <class T, class... Args> + T get_element_by_type(std::tuple<Args...>& t) + { + return std::get<detail::get_index_of_element_from_tuple_by_type_impl<T, 0, Args...>::value>(t); + } + + template <class T, class... Args> + T* get_element_by_type_ptr(std::tuple<Args...>& t) + { + return &std::get<detail::get_index_of_element_from_tuple_by_type_impl<T, 0, Args...>::value>(t); + } + + } // namespace utility } |