Branch data Line data Source code
1 : : // Copyright (c) 2023 The Bitcoin Core developers
2 : : // Distributed under the MIT software license, see the accompanying
3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 : :
5 : : #ifndef BITCOIN_UTIL_ANY_H
6 : : #define BITCOIN_UTIL_ANY_H
7 : :
8 : : #include <any>
9 : :
10 : : namespace util {
11 : :
12 : : /**
13 : : * Helper function to access the contained object of a std::any instance.
14 : : * Returns a pointer to the object if passed instance has a value and the type
15 : : * matches, nullptr otherwise.
16 : : */
17 : : template<typename T>
18 : 37 : T* AnyPtr(const std::any& any) noexcept
19 : : {
20 : 37 : T* const* ptr = std::any_cast<T*>(&any);
21 [ + - ]: 37 : return ptr ? *ptr : nullptr;
22 : : }
23 : :
24 : : } // namespace util
25 : :
26 : : #endif // BITCOIN_UTIL_ANY_H
|