forked from mpusz/mp-units
Design cleanup
- unknown_unit added - examples refactored - base_type renamed to downcast_base_type - scaled_unit renamed to named_scaled_unit - detail::reference_unit renamed to scaled_unit - quantity_test cleanup
This commit is contained in:
@@ -29,16 +29,16 @@ namespace units {
|
||||
|
||||
template<typename BaseType>
|
||||
struct downcast_base {
|
||||
using base_type = BaseType;
|
||||
using downcast_base_type = BaseType;
|
||||
friend auto downcast_guide(downcast_base);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
concept Downcastable =
|
||||
requires {
|
||||
typename T::base_type;
|
||||
typename T::downcast_base_type;
|
||||
} &&
|
||||
std::derived_from<T, downcast_base<typename T::base_type>>;
|
||||
std::derived_from<T, downcast_base<typename T::downcast_base_type>>;
|
||||
|
||||
template<typename Target, Downcastable T>
|
||||
struct downcast_child : T {
|
||||
@@ -67,6 +67,6 @@ namespace units {
|
||||
using downcast = decltype(detail::downcast_impl<T>());
|
||||
|
||||
template<Downcastable T>
|
||||
using downcast_base_t = T::base_type;
|
||||
using downcast_base_t = T::downcast_base_type;
|
||||
|
||||
} // namespace units
|
||||
|
||||
@@ -27,15 +27,14 @@
|
||||
|
||||
namespace units {
|
||||
|
||||
namespace detail {
|
||||
template<typename R>
|
||||
concept UnitRatio = Ratio<R> && (R::num * R::den > 0);
|
||||
|
||||
template<typename U, Ratio R>
|
||||
struct reference_unit;
|
||||
|
||||
} // namespace detail
|
||||
template<typename U, UnitRatio R>
|
||||
struct scaled_unit;
|
||||
|
||||
// Unit
|
||||
template<typename T>
|
||||
concept Unit = is_derived_from_instantiation<T, detail::reference_unit>;
|
||||
concept Unit = is_derived_from_instantiation<T, scaled_unit>;
|
||||
|
||||
} // namespace units
|
||||
|
||||
Reference in New Issue
Block a user