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 : 679 : T* AnyPtr(const std::any& any) noexcept 19 : : { 20 : 679 : T* const* ptr = std::any_cast<T*>(&any); 21 [ + - ]: 679 : return ptr ? *ptr : nullptr; 22 : : } 23 : : 24 : : } // namespace util 25 : : 26 : : #endif // BITCOIN_UTIL_ANY_H