3#include <AMReX_Config.H>
30 template <
typename MF,
31 std::enable_if_t<!std::is_same_v<Any,std::decay_t<MF>>,
int> = 0>
33 :
m_ptr(std::make_unique<innards<MF> >(std::forward<MF>(mf)))
37 template <
typename MF,
38 std::enable_if_t<!std::is_same_v<Any,std::decay_t<MF>>,
int> = 0>
40 m_ptr = std::make_unique<innards<MF> >(std::forward<MF>(mf));
45 [[nodiscard]]
const std::type_info&
Type ()
const {
54 template <
typename MF>
55 [[nodiscard]] MF&
get () {
56 if (
auto p0 =
dynamic_cast<innards<MF>*
>(
m_ptr.get())) {
59 return dynamic_cast<innards<MF&>&
>(*m_ptr).m_mf;
64 template <
typename MF>
65 [[nodiscard]] MF
const&
get ()
const {
66 if (
auto p0 =
dynamic_cast<innards<MF>*
>(
m_ptr.get())) {
68 }
else if (
auto p1 =
dynamic_cast<innards<MF&>*
>(
m_ptr.get())) {
71 return dynamic_cast<innards<MF const&> const&
>(*m_ptr).m_mf;
75 template <
typename MF>
76 [[nodiscard]]
bool is ()
const {
return Type() ==
typeid(MF); }
86 [[nodiscard]]
virtual const std::type_info& Type ()
const = 0;
87 virtual ~innards_base () =
default;
90 template <
typename MF>
91 struct innards final : innards_base
97 ~innards () final = default;
99 [[nodiscard]] const std::type_info& Type () const final {
108 std::unique_ptr<innards_base>
m_ptr;
Definition AMReX_Any.H:17
Any(MF &&mf)
Constructs by moving the given object.
Definition AMReX_Any.H:32
bool is() const
Definition AMReX_Any.H:76
const std::type_info & Type() const
Returns the contained type.
Definition AMReX_Any.H:45
bool hasValue() const
Definition AMReX_Any.H:78
MF const & get() const
Returns a const reference to the contained object.
Definition AMReX_Any.H:65
std::unique_ptr< innards_base > m_ptr
Definition AMReX_Any.H:108
Any & operator=(Any const &rhs)=delete
MF & get()
Returns a reference to the contained object.
Definition AMReX_Any.H:55
Any(Any const &rhs)=delete
Definition AMReX_Amr.cpp:49