From 00b573873eeb157a5af3b29843142f73a3b0f90c Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <alberto.nidasio@skywarder.eu> Date: Tue, 12 Dec 2023 19:21:07 +0100 Subject: [PATCH] tmp --- src/shared/units/Angle.h | 5 +---- src/shared/units/Units.h | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/shared/units/Angle.h b/src/shared/units/Angle.h index 411296dfc..dbc26b1fc 100644 --- a/src/shared/units/Angle.h +++ b/src/shared/units/Angle.h @@ -34,10 +34,7 @@ namespace Angle { template <class Ratio = std::ratio<1>> -class Angle : public Unit<Ratio> -{ - using Unit<Ratio>::Unit; -}; +using Angle = Unit<UnitKind::Angle, Ratio>; using Degree = Angle<>; // Angle in degrees using Radian = // Angle in radians diff --git a/src/shared/units/Units.h b/src/shared/units/Units.h index dd080649b..20499a3b6 100644 --- a/src/shared/units/Units.h +++ b/src/shared/units/Units.h @@ -32,14 +32,20 @@ namespace Boardcore namespace Units { -template <class Ratio = std::ratio<1>> +enum class UnitKind +{ + Angle, + Length +}; + +template <UnitKind Kind, class Ratio = std::ratio<1>> // Base class to implement custom measurement units logic. class Unit { public: Unit(float val) : _value(val){}; template <class FromRatio> - constexpr explicit Unit(Unit<FromRatio> const &from) + constexpr explicit Unit(Unit<Kind, FromRatio> const &from) : _value(from.template value<Ratio>()) { } @@ -67,10 +73,11 @@ private: }; // Sum, Subtraction, Multiplication, Division -template <class DerivedUnit> -constexpr auto operator+(const DerivedUnit &lhs, const DerivedUnit &rhs) +template <UnitKind Kind, class Ratio> +constexpr auto operator+(const Unit<Kind, Ratio> &lhs, + const Unit<Kind, Ratio> &rhs) { - return DerivedUnit(lhs.template value() + rhs.template value()); + return Unit(lhs.template value() + rhs.template value()); } template <class DerivedUnit> -- GitLab