mijin2/source/mijin/util/variant.hpp

45 lines
848 B
C++

#pragma once
#if !defined(MIJIN_UTIL_VARIANT_HPP_INCLUDED)
#define MIJIN_UTIL_VARIANT_HPP_INCLUDED 1
#include <utility>
#include <variant>
#include "./traits.hpp"
namespace mijin
{
//
// public traits
//
template<typename TSearch, typename TVariant>
inline constexpr bool variant_contains_v = false;
template<typename TSearch, typename... TVariantTypes>
inline constexpr bool variant_contains_v<TSearch, std::variant<TVariantTypes...>> = mijin::is_any_type_v<TSearch, TVariantTypes...>;
//
// public types
//
template<typename... TCallable>
struct Visitor : TCallable ...
{
using TCallable::operator()...;
};
template<typename TRet>
struct CastTo
{
template<typename T>
TRet operator()(T&& arg) const
{
return static_cast<TRet>(std::forward<T>(arg));
}
};
}
#endif // !defined(MIJIN_UTIL_VARIANT_HPP_INCLUDED)