mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-19 03:18:09 +08:00
feat: get user-defined value by constructor
If a user-defined constructor has constructor(const toml::value&), then it should be convertible in `toml::get` and `toml::find`.
This commit is contained in:
20
toml/get.hpp
20
toml/get.hpp
@@ -259,6 +259,15 @@ template<typename T, typename C,
|
|||||||
std::size_t S = sizeof(::toml::from<T>)>
|
std::size_t S = sizeof(::toml::from<T>)>
|
||||||
T get(const basic_value<C, M, V>&);
|
T get(const basic_value<C, M, V>&);
|
||||||
|
|
||||||
|
// T(const toml::value&) and T is not toml::basic_value
|
||||||
|
template<typename T, typename C,
|
||||||
|
template<typename ...> class M, template<typename ...> class V>
|
||||||
|
detail::enable_if_t<detail::conjunction<
|
||||||
|
detail::negation<detail::is_basic_value<T>>,
|
||||||
|
std::is_constructible<T, const basic_value<C, M, V>&>
|
||||||
|
>::value, T>
|
||||||
|
get(const basic_value<C, M, V>&);
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// array-like types; most likely STL container, like std::vector, etc.
|
// array-like types; most likely STL container, like std::vector, etc.
|
||||||
|
|
||||||
@@ -417,6 +426,17 @@ T get(const basic_value<C, M, V>& v)
|
|||||||
return ::toml::from<T>::from_toml(v);
|
return ::toml::from<T>::from_toml(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, typename C,
|
||||||
|
template<typename ...> class M, template<typename ...> class V>
|
||||||
|
detail::enable_if_t<detail::conjunction<
|
||||||
|
detail::negation<detail::is_basic_value<T>>,
|
||||||
|
std::is_constructible<T, const basic_value<C, M, V>&>
|
||||||
|
>::value, T>
|
||||||
|
get(const basic_value<C, M, V>& v)
|
||||||
|
{
|
||||||
|
return T(v);
|
||||||
|
}
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// find
|
// find
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user