WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
func_trait.h
Go to the documentation of this file.
1#pragma once
3#include <tuple>
4#ifdef WEBCFACE_MESON
5#include "webcface-config.h"
6#else
7#include "webcface/common/webcface-config.h"
8#endif
9
11namespace traits {
12template <typename T>
13constexpr auto getInvokeSignature(T &&) -> decltype(&T::operator()) {
14 return &T::operator();
15}
16template <typename Ret, typename... Args>
17constexpr auto getInvokeSignature(Ret (*p)(Args...)) {
18 return p;
19}
20template <typename T>
22template <typename Ret, typename... Args>
23struct InvokeSignatureTrait<Ret(Args...)> {
24 using ReturnType = Ret;
25 using ArgsTuple = std::tuple<std::decay_t<Args>...>;
26 static constexpr std::size_t ArgsSize = std::tuple_size_v<ArgsTuple>;
27 template <std::size_t Index>
28 using ArgsAt = std::tuple_element_t<Index, ArgsTuple>;
29};
30template <typename Ret, typename T, typename... Args>
31struct InvokeSignatureTrait<Ret (T::*)(Args...)>
32 : InvokeSignatureTrait<Ret(Args...)> {};
33template <typename Ret, typename T, typename... Args>
34struct InvokeSignatureTrait<Ret (T::*)(Args...) const>
35 : InvokeSignatureTrait<Ret(Args...)> {};
36template <typename Ret, typename... Args>
37struct InvokeSignatureTrait<Ret (*)(Args...)>
38 : InvokeSignatureTrait<Ret(Args...)> {};
39
47template <typename T>
49 std::declval<std::decay_t<T>>()))>;
50
51} // namespace traits
constexpr auto getInvokeSignature(T &&) -> decltype(&T::operator())
Definition func_trait.h:13
std::tuple_element_t< Index, ArgsTuple > ArgsAt
Definition func_trait.h:28
std::tuple< std::decay_t< Args >... > ArgsTuple
Definition func_trait.h:25
Definition func_trait.h:21
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117