Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
CallableTraits.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <type_traits>
10
11namespace corium {
12namespace internal {
13
14template <typename T>
16
17// Const member function operator() (const lambda)
18template <typename C, typename R, typename EventType>
19struct callable_event_type<R(C::*)(const EventType&) const> {
20 using type = std::decay_t<EventType>;
21};
22
23// Non-const member function operator() (mutable lambda)
24template <typename C, typename R, typename EventType>
25struct callable_event_type<R(C::*)(const EventType&)> {
26 using type = std::decay_t<EventType>;
27};
28
29// Value parameter const operator()
30template <typename C, typename R, typename EventType>
31struct callable_event_type<R(C::*)(EventType) const> {
32 using type = std::decay_t<EventType>;
33};
34
35// Value parameter non-const operator()
36template <typename C, typename R, typename EventType>
37struct callable_event_type<R(C::*)(EventType)> {
38 using type = std::decay_t<EventType>;
39};
40
41// Free function pointer (const ref)
42template <typename R, typename EventType>
43struct callable_event_type<R(*)(const EventType&)> {
44 using type = std::decay_t<EventType>;
45};
46
47// Free function pointer (value)
48template <typename R, typename EventType>
49struct callable_event_type<R(*)(EventType)> {
50 using type = std::decay_t<EventType>;
51};
52
53template <typename Callable, typename = void>
55
56template <typename Callable>
57struct get_callable_event_type<Callable, std::void_t<decltype(&std::decay_t<Callable>::operator())>> {
58 using type = typename callable_event_type<decltype(&std::decay_t<Callable>::operator())>::type;
59};
60
61template <typename R, typename EventType>
62struct get_callable_event_type<R(*)(const EventType&)> {
63 using type = std::decay_t<EventType>;
64};
65
66template <typename R, typename EventType>
67struct get_callable_event_type<R(*)(EventType)> {
68 using type = std::decay_t<EventType>;
69};
70
72template <typename Callable>
74
75} // namespace internal
76
78
79} // namespace corium
typename get_callable_event_type< Callable >::type callable_event_type_t
Helper trait to deduce the concrete EventType argument from a callable (lambda, function pointer,...
Definition CallableTraits.hpp:73
Definition Application.hpp:16
std::decay_t< EventType > type
Definition CallableTraits.hpp:32
std::decay_t< EventType > type
Definition CallableTraits.hpp:38
std::decay_t< EventType > type
Definition CallableTraits.hpp:20
std::decay_t< EventType > type
Definition CallableTraits.hpp:26
std::decay_t< EventType > type
Definition CallableTraits.hpp:50
std::decay_t< EventType > type
Definition CallableTraits.hpp:44
Definition CallableTraits.hpp:15
typename callable_event_type< decltype(&std::decay_t< Callable >::operator())>::type type
Definition CallableTraits.hpp:58
std::decay_t< EventType > type
Definition CallableTraits.hpp:68
std::decay_t< EventType > type
Definition CallableTraits.hpp:63
Definition CallableTraits.hpp:54