3#include <AMReX_Config.H>
31 template <
typename MF>
32 requires (!std::same_as<Any,std::remove_cvref_t<MF>>)
34 : m_ptr(std::make_unique<innards<MF> >(std::forward<MF>(mf)))
38 template <
typename MF>
39 requires (!std::same_as<Any,std::remove_cvref_t<MF>>)
40 Any&
operator= (MF && mf)
42 m_ptr = std::make_unique<innards<MF> >(std::forward<MF>(mf));
47 [[nodiscard]]
const std::type_info&
Type ()
const {
56 template <
typename MF>
57 [[nodiscard]] MF&
get () {
58 if (
auto p0 =
dynamic_cast<innards<MF>*
>(m_ptr.get())) {
61 return dynamic_cast<innards<MF&>&
>(*m_ptr).m_mf;
66 template <
typename MF>
67 [[nodiscard]] MF
const&
get ()
const {
68 if (
auto p0 =
dynamic_cast<innards<MF>*
>(m_ptr.get())) {
70 }
else if (
auto p1 =
dynamic_cast<innards<MF&>*
>(m_ptr.get())) {
73 return dynamic_cast<innards<MF const&> const&
>(*m_ptr).m_mf;
79 template <
typename MF>
80 [[nodiscard]]
bool is ()
const {
return Type() ==
typeid(MF); }
83 [[nodiscard]]
bool hasValue ()
const {
return m_ptr !=
nullptr; }
91 [[nodiscard]]
virtual const std::type_info& Type ()
const = 0;
92 virtual ~innards_base () =
default;
95 template <
typename MF>
96 struct innards final : innards_base
102 ~innards () final = default;
104 [[nodiscard]] const std::type_info& Type () const final {
113 std::unique_ptr<innards_base> m_ptr;
Definition AMReX_Any.H:18
bool is() const
Definition AMReX_Any.H:80
const std::type_info & Type() const
Returns the contained type.
Definition AMReX_Any.H:47
bool hasValue() const
Returns whether the object contains a value.
Definition AMReX_Any.H:83
MF const & get() const
Returns a const reference to the contained object.
Definition AMReX_Any.H:67
Any & operator=(Any const &rhs)=delete
MF & get()
Returns a reference to the contained object.
Definition AMReX_Any.H:57
Any(Any const &rhs)=delete
Definition AMReX_Amr.cpp:50