util: introduce helper AnyPtr to access std::any instances

Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
This commit is contained in:
Sebastian FalbesonerandRussell Yanofsky committed 2021-03-29 22:37:59 +02:00
1 parent 1c7be9ab90
commit 95cccf8a4b
1 file changed
+13
+13
View File
@@ -25,6 +25,7 @@
#include <util/threadnames.h> #include <util/threadnames.h>
#include <util/time.h> #include <util/time.h>
#include <any>
#include <exception> #include <exception>
#include <map> #include <map>
#include <optional> #include <optional>
@@ -500,6 +501,18 @@ inline void insert(std::set<TsetT>& dst, const Tsrc& src) {
dst.insert(src.begin(), src.end()); dst.insert(src.begin(), src.end());
} }
/**
* Helper function to access the contained object of a std::any instance.
* Returns a pointer to the object if passed instance has a value and the type
* matches, nullptr otherwise.
*/
template<typename T>
T* AnyPtr(const std::any& any) noexcept
{
T* const* ptr = std::any_cast<T*>(&any);
return ptr ? *ptr : nullptr;
}
#ifdef WIN32 #ifdef WIN32
class WinCmdLineArgs class WinCmdLineArgs
{ {