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:
Mateusz Pusz
2019-12-06 12:18:39 +01:00
parent c48bfe2098
commit f31b26b5e5
22 changed files with 354 additions and 160 deletions
+4 -4
View File
@@ -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
+5 -6
View File
@@ -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