option parser: make assign_default_once work with non-copyable types
This commit is contained in:
@@ -41,19 +41,18 @@ struct option_parser
|
|||||||
|
|
||||||
template <typename ArgT>
|
template <typename ArgT>
|
||||||
assign_value_once(DestT &dest, ArgT &&value)
|
assign_value_once(DestT &dest, ArgT &&value)
|
||||||
: m_assigned(false), m_dest(dest), m_source(std::forward<ArgT>(value)) { }
|
: m_dest(dest), m_source(std::make_shared<source_type>(std::forward<ArgT>(value))) { }
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
assert(m_assigned == false);
|
assert(m_source.get() != nullptr);
|
||||||
m_dest = std::move(m_source);
|
m_dest = std::move(*m_source);
|
||||||
m_assigned = true;
|
m_source.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_assigned;
|
DestT &m_dest;
|
||||||
dest_type &m_dest;
|
std::shared_ptr<source_type> m_source;
|
||||||
source_type m_source;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename IntermediateT, typename DestT, typename TransformT>
|
template <typename IntermediateT, typename DestT, typename TransformT>
|
||||||
|
|||||||
Reference in New Issue
Block a user