Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qoverload.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QOVERLOAD_H
6#define QOVERLOAD_H
7
8#include <QtCore/qtconfigmacros.h>
9#include <QtCore/qtpreprocessorsupport.h>
10
11#if 0
12#pragma qt_class(QOverload)
13#endif
14
15QT_BEGIN_NAMESPACE
16
17#ifdef Q_QDOC
18// Just for documentation generation
19template<typename T>
20auto qOverload(T functionPointer);
21template<typename T>
22auto qConstOverload(T memberFunctionPointer);
23template<typename T>
24auto qNonConstOverload(T memberFunctionPointer);
25#else
26template <typename... Args>
27struct QNonConstOverload
28{
29 template <typename R, typename T>
30 constexpr auto operator()(R (T::*ptr)(Args...)) const noexcept -> decltype(ptr)
31 { return ptr; }
32
33 template <typename R, typename T>
34 static constexpr auto of(R (T::*ptr)(Args...)) noexcept -> decltype(ptr)
35 { return ptr; }
36};
37
38template <typename... Args>
40{
41 template <typename R, typename T>
42 constexpr auto operator()(R (T::*ptr)(Args...) const) const noexcept -> decltype(ptr)
43 { return ptr; }
44
45 template <typename R, typename T>
46 static constexpr auto of(R (T::*ptr)(Args...) const) noexcept -> decltype(ptr)
47 { return ptr; }
48};
49
50template <typename... Args>
52{
53 using QConstOverload<Args...>::of;
54 using QConstOverload<Args...>::operator();
55 using QNonConstOverload<Args...>::of;
56 using QNonConstOverload<Args...>::operator();
57
58 template <typename R>
59 constexpr auto operator()(R (*ptr)(Args...)) const noexcept -> decltype(ptr)
60 { return ptr; }
61
62 template <typename R>
63 static constexpr auto of(R (*ptr)(Args...)) noexcept -> decltype(ptr)
64 { return ptr; }
65};
66
67template <typename... Args> constexpr inline QOverload<Args...> qOverload = {};
68template <typename... Args> constexpr inline QConstOverload<Args...> qConstOverload = {};
69template <typename... Args> constexpr inline QNonConstOverload<Args...> qNonConstOverload = {};
70
71#endif // Q_QDOC
72
73QT_END_NAMESPACE
74
75#endif /* QOVERLOAD_H */
constexpr QOverload< Args... > qOverload
Definition qoverload.h:67
constexpr QConstOverload< Args... > qConstOverload
Definition qoverload.h:68
constexpr QNonConstOverload< Args... > qNonConstOverload
Definition qoverload.h:69
constexpr auto operator()(R(T::*ptr)(Args...) const) const noexcept -> decltype(ptr)
Definition qoverload.h:42
static constexpr auto of(R(T::*ptr)(Args...) const) noexcept -> decltype(ptr)
Definition qoverload.h:46
static constexpr auto of(R(*ptr)(Args...)) noexcept -> decltype(ptr)
Definition qoverload.h:63
constexpr auto operator()(R(*ptr)(Args...)) const noexcept -> decltype(ptr)
Definition qoverload.h:59