46 explicit Data(
const std::type_info &t_type)
53 virtual ~Data() =
default;
55 virtual void *
data() = 0;
57 const std::type_info &
type()
const
62 virtual std::unique_ptr<Data> clone()
const = 0;
63 const std::type_info &m_type;
67 struct Data_Impl : Data
69 explicit Data_Impl(
T t_type)
71 m_data(std::move(t_type))
80 std::unique_ptr<Data> clone()
const override
82 return std::unique_ptr<Data>(
new Data_Impl<T>(m_data));
85 Data_Impl &
operator=(
const Data_Impl&) =
delete;
90 std::unique_ptr<Data> m_data;
102 m_data = t_any.m_data->clone();
109 template<
typename ValueType,
110 typename =
typename std::enable_if<!std::is_same<Any, typename std::decay<ValueType>::type>::value>
::type>
111 explicit Any(ValueType &&t_value)
112 : m_data(
std::unique_ptr<Data>(new Data_Impl<typename
std::decay<ValueType>::
type>(
std::forward<ValueType>(t_value))))
124 template<
typename ToType>
127 if (m_data &&
typeid(ToType) == m_data->type())
129 return *
static_cast<ToType *
>(m_data->data());
139 std::swap(t_other.m_data, m_data);
146 return !bool(m_data);
149 const std::type_info &
type()
const
152 return m_data->type();
lazy data
Definition meshpage.php:1583