Math/Angle: Replace conversion constructors by conversion operators

This commit is contained in:
Lynix 2018-10-11 00:07:50 +02:00
parent 6653be6f2c
commit d2b1d51ecb
2 changed files with 25 additions and 30 deletions

View File

@ -27,8 +27,6 @@ namespace Nz
public:
Angle() = default;
Angle(T value);
template<AngleUnit U = Unit, typename = std::enable_if_t<U == AngleUnit::Degree>> explicit Angle(const Angle<AngleUnit::Radian, T>& value) { Set(value); }
template<AngleUnit U = Unit, typename = std::enable_if_t<U == AngleUnit::Radian>> explicit Angle(const Angle<AngleUnit::Degree, T>& value) { Set(value); }
template<typename U> explicit Angle(const Angle<Unit, U>& Angle);
Angle(const Angle&) = default;
~Angle() = default;
@ -42,8 +40,6 @@ namespace Nz
void Normalize();
template<AngleUnit U = Unit, typename = std::enable_if_t<U == AngleUnit::Degree>> Angle& Set(const Angle<AngleUnit::Radian, T>& ang);
template<AngleUnit U = Unit, typename = std::enable_if_t<U == AngleUnit::Radian>> Angle& Set(const Angle<AngleUnit::Degree, T>& ang);
Angle& Set(const Angle& ang);
template<typename U> Angle& Set(const Angle<Unit, U>& ang);
@ -55,6 +51,9 @@ namespace Nz
Angle<AngleUnit::Radian, T> ToRadianAngle() const;
String ToString() const;
template<AngleUnit U = Unit, typename = std::enable_if_t<U != AngleUnit::Degree>> operator Angle<AngleUnit::Degree, T>();
template<AngleUnit U = Unit, typename = std::enable_if_t<U != AngleUnit::Radian>> operator Angle<AngleUnit::Radian, T>();
Angle& operator=(const Angle&) = default;
Angle operator+(const Angle& other) const;

View File

@ -236,32 +236,6 @@ namespace Nz
value += twoLimit;
}
/*!
* \brief Changes the angle value by converting a radian angle
*
* \param Angle Radian angle which will be converted
*/
template<AngleUnit Unit, typename T>
template<AngleUnit U, typename>
Angle<Unit, T>& Angle<Unit, T>::Set(const Angle<AngleUnit::Radian, T>& ang)
{
value = RadianToDegree(ang.value);
return *this;
}
/*!
* \brief Changes the angle value by converting a degree angle
*
* \param Angle Degree angle which will be converted
*/
template<AngleUnit Unit, typename T>
template<AngleUnit U, typename>
Angle<Unit, T>& Angle<Unit, T>::Set(const Angle<AngleUnit::Degree, T>& ang)
{
value = DegreeToRadian(ang.value);
return *this;
}
/*!
* \brief Copies the angle value of an angle
*
@ -367,6 +341,28 @@ namespace Nz
return Detail::AngleUtils<Unit>::ToString(value);
}
/*!
* \brief Returns the degree angle that is equivalent to this one
* \return Equivalent degree angle
*/
template<AngleUnit Unit, typename T>
template<AngleUnit U, typename>
Angle<Unit, T>::operator Angle<AngleUnit::Degree, T>()
{
return ToDegreeAngle();
}
/*!
* \brief Converts the angle to a string representation
* \return String representation of the angle
*/
template<AngleUnit Unit, typename T>
template<AngleUnit U, typename>
Angle<Unit, T>::operator Angle<AngleUnit::Radian, T>()
{
return ToRadianAngle();
}
/*!
* \brief Addition operator
* \return Adds two angles together