LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
typegetter.h
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#pragma once
10
11
#include <tuple>
12
13
namespace
LC::Util
14
{
15
namespace
detail
16
{
17
template
<
typename
R,
typename
... Args>
18
std::tuple<R, Args...>*
TypeGetter
(R (*) (Args...));
19
20
template
<
typename
F>
21
auto
TypeGetter
(F&& f) ->
decltype
(
TypeGetter
(+f));
22
23
template
<
typename
C,
typename
R,
typename
... Args>
24
std::tuple<R,
const
C, Args...>*
TypeGetter
(R (C::*) (Args...)
const
);
25
26
template
<
typename
C,
typename
R,
typename
... Args>
27
std::tuple<R, C, Args...>*
TypeGetter
(R (C::*) (Args...));
28
29
template
<
typename
C,
typename
R>
30
std::tuple<R, C>*
TypeGetter
(R (C::*));
31
32
template
<
typename
C,
typename
R,
typename
... Args>
33
std::tuple<R, Args...>*
TypeGetterNoClass
(R (C::*) (Args...)
const
);
34
35
template
<
typename
C,
typename
R,
typename
... Args>
36
std::tuple<R, Args...>*
TypeGetterNoClass
(R (C::*) (Args...));
37
38
template
<
typename
C>
39
decltype
(
TypeGetterNoClass
(&C::operator ()))
TypeGetter
(
const
C& c);
40
41
template
<
typename
F>
42
using
CallTypeGetter_t
= std::decay_t<decltype (*detail::TypeGetter (*static_cast<F*> (
nullptr
)))>;
43
}
44
45
template
<
typename
F>
46
concept
SomeInvokable
=
requires
(F f) {
detail::TypeGetter
(f); };
47
48
template
<SomeInvokable F,
size_t
Idx>
49
using
ArgType_t
= std::tuple_element_t<Idx + 1, detail::CallTypeGetter_t<F>>;
50
51
template
<SomeInvokable F>
52
using
RetType_t
= std::tuple_element_t<0, detail::CallTypeGetter_t<F>>;
53
54
template
<SomeInvokable F>
55
inline
constexpr
auto
ArgCount_v
= std::tuple_size_v<detail::CallTypeGetter_t<F>> - 1;
56
57
namespace
detail
58
{
59
template
<
typename
>
60
struct
DecomposeMemberPtr
61
{
62
};
63
64
template
<
typename
R,
typename
C>
65
struct
DecomposeMemberPtr
<R (C::*)>
66
{
67
using
Value_t
= R;
68
using
StructType_t
= C;
69
};
70
}
71
72
template
<
typename
PtrType>
73
using
MemberTypeType_t
=
typename
detail::DecomposeMemberPtr<PtrType>::Value_t
;
74
75
template
<
typename
PtrType>
76
using
MemberTypeStruct_t
=
typename
detail::DecomposeMemberPtr<PtrType>::StructType_t
;
77
78
template
<auto Ptr>
79
using
MemberPtrType_t
=
MemberTypeType_t
<
decltype
(Ptr)>;
80
81
template
<auto Ptr>
82
using
MemberPtrStruct_t
=
MemberTypeStruct_t
<
decltype
(Ptr)>;
83
}
LC::Util::SomeInvokable
Definition
typegetter.h:46
LC::Util::detail
Definition
fancytrayiconfreedesktop.cpp:24
LC::Util::detail::TypeGetter
std::tuple< R, Args... > * TypeGetter(R(*)(Args...))
LC::Util::detail::CallTypeGetter_t
std::decay_t< decltype(*detail::TypeGetter(*static_cast< F * >(nullptr)))> CallTypeGetter_t
Definition
typegetter.h:42
LC::Util::detail::TypeGetterNoClass
std::tuple< R, Args... > * TypeGetterNoClass(R(C::*)(Args...) const)
LC::Util
Definition
icoreproxy.h:34
LC::Util::RetType_t
std::tuple_element_t< 0, detail::CallTypeGetter_t< F > > RetType_t
Definition
typegetter.h:52
LC::Util::ArgCount_v
constexpr auto ArgCount_v
Definition
typegetter.h:55
LC::Util::MemberTypeType_t
typename detail::DecomposeMemberPtr< PtrType >::Value_t MemberTypeType_t
Definition
typegetter.h:73
LC::Util::MemberPtrType_t
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
Definition
typegetter.h:79
LC::Util::ArgType_t
std::tuple_element_t< Idx+1, detail::CallTypeGetter_t< F > > ArgType_t
Definition
typegetter.h:49
LC::Util::MemberPtrStruct_t
MemberTypeStruct_t< decltype(Ptr)> MemberPtrStruct_t
Definition
typegetter.h:82
LC::Util::MemberTypeStruct_t
typename detail::DecomposeMemberPtr< PtrType >::StructType_t MemberTypeStruct_t
Definition
typegetter.h:76
LC::Util::detail::DecomposeMemberPtr< R(C::*)>::StructType_t
C StructType_t
Definition
typegetter.h:68
LC::Util::detail::DecomposeMemberPtr< R(C::*)>::Value_t
R Value_t
Definition
typegetter.h:67
LC::Util::detail::DecomposeMemberPtr
Definition
typegetter.h:61
src
util
sll
typegetter.h
Generated by
1.17.0