3#include <AMReX_Config.H>
41 template <
typename MF>
42 requires (!std::same_as<Any,std::remove_cvref_t<MF>>)
44 : m_ptr(std::make_unique<innards<MF> >(std::forward<MF>(mf)))
49 template <
typename MF>
50 requires (!std::same_as<Any,std::remove_cvref_t<MF>>)
51 Any&
operator= (MF && mf)
53 m_ptr = std::make_unique<innards<MF> >(std::forward<MF>(mf));
58 [[nodiscard]]
const std::type_info&
Type ()
const {
67 template <
typename MF>
68 [[nodiscard]] MF&
get () {
69 if (
auto p0 =
dynamic_cast<innards<MF>*
>(m_ptr.get())) {
72 return dynamic_cast<innards<MF&>&
>(*m_ptr).m_mf;
77 template <
typename MF>
78 [[nodiscard]] MF
const&
get ()
const {
79 if (
auto p0 =
dynamic_cast<innards<MF>*
>(m_ptr.get())) {
81 }
else if (
auto p1 =
dynamic_cast<innards<MF&>*
>(m_ptr.get())) {
84 return dynamic_cast<innards<MF const&> const&
>(*m_ptr).m_mf;
90 template <
typename MF>
91 [[nodiscard]]
bool is ()
const {
return Type() ==
typeid(MF); }
94 [[nodiscard]]
bool hasValue ()
const {
return m_ptr !=
nullptr; }
102 [[nodiscard]]
virtual const std::type_info& Type ()
const = 0;
103 virtual ~innards_base () =
default;
106 template <
typename MF>
107 struct innards final : innards_base
110 : m_mf(std::move(mf))
113 ~innards () final = default;
115 [[nodiscard]] const std::type_info& Type () const final {
124 std::unique_ptr<innards_base> m_ptr;
Type-erased container similar to std::any, but supports move-only types.
Definition AMReX_Any.H:27
bool is() const
Definition AMReX_Any.H:91
const std::type_info & Type() const
Returns the contained type.
Definition AMReX_Any.H:58
bool hasValue() const
Returns whether the object contains a value.
Definition AMReX_Any.H:94
MF const & get() const
Returns a const reference to the contained object.
Definition AMReX_Any.H:78
Any & operator=(Any const &rhs)=delete
MF & get()
Returns a reference to the contained object.
Definition AMReX_Any.H:68
Any(Any const &rhs)=delete
Definition AMReX_Amr.cpp:50