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