Seastar
High performance C++ framework for concurrent servers
function_traits.hh
1 /*
2  * This file is open source software, licensed to you under the terms
3  * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4  * distributed with this work for additional information regarding copyright
5  * ownership. You may not use this file except in compliance with the License.
6  *
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing,
12  * software distributed under the License is distributed on an
13  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14  * KIND, either express or implied. See the License for the
15  * specific language governing permissions and limitations
16  * under the License.
17  */
18 /*
19  * Copyright 2015 Cloudius Systems
20  */
21 
22 #pragma once
23 
24 #include <tuple>
25 
26 namespace seastar {
27 
28 template<typename T>
29 struct function_traits;
30 
31 template<typename Ret, typename... Args>
32 struct function_traits<Ret(Args...)>
33 {
34  using return_type = Ret;
35  using args_as_tuple = std::tuple<Args...>;
36  using signature = Ret (Args...);
37 
38  static constexpr std::size_t arity = sizeof...(Args);
39 
40  template <std::size_t N>
41  struct arg
42  {
43  static_assert(N < arity, "no such parameter index.");
44  using type = typename std::tuple_element<N, std::tuple<Args...>>::type;
45  };
46 };
47 
48 template<typename Ret, typename... Args>
49 struct function_traits<Ret(*)(Args...)> : public function_traits<Ret(Args...)>
50 {};
51 
52 template <typename T, typename Ret, typename... Args>
53 struct function_traits<Ret(T::*)(Args...)> : public function_traits<Ret(Args...)>
54 {};
55 
56 template <typename T, typename Ret, typename... Args>
57 struct function_traits<Ret(T::*)(Args...) const> : public function_traits<Ret(Args...)>
58 {};
59 
60 template <typename T>
61 struct function_traits : public function_traits<decltype(&T::operator())>
62 {};
63 
64 template<typename T>
66 {};
67 
68 }
Seastar API namespace.
Definition: abort_on_ebadf.hh:24
Definition: function_traits.hh:62