45 lines
848 B
C++
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)
|