blob: d28d7c88eb98b266b9f2a40e4f3e386305e0f4db (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
// Copyright (c) 2013-2020 Vittorio Romeo
// License: Academic Free License ("AFL") v. 3.0
// AFL License page: https://opensource.org/licenses/AFL-3.0
#pragma once
#include <cstddef>
#include <tuple>
namespace hg::Utils {
template <typename>
struct ArgExtractor;
template <typename R, typename F, typename... Args>
struct ArgExtractor<R (F::*)(Args...)>
{
using Return = R;
using Function = F;
enum
{
numArgs = sizeof...(Args)
};
template <std::size_t I>
using NthArg = std::tuple_element_t<I, std::tuple<Args...>>;
};
template <typename R, typename F, typename... Args>
struct ArgExtractor<R (F::*)(Args...) const> : ArgExtractor<R (F::*)(Args...)>
{
using ArgExtractor<R (F::*)(Args...)>::NthArg;
};
} // namespace hg::Utils
|