vec: Added no-overhead constructor for tag change

This commit is contained in:
Jan Mrna
2025-10-17 10:11:15 +02:00
parent b94b18993d
commit cfe48661d8

View File

@@ -46,6 +46,9 @@ public:
vec(std::array<T, N> array) : m_Array{array} {} vec(std::array<T, N> array) : m_Array{array} {}
template<typename OtherTag>
vec(vec<T, N, OtherTag>&& other) : m_Array{std::move(other.m_Array)} {}
// //
// Access to elements & data // Access to elements & data
// //
@@ -276,11 +279,17 @@ public:
} }
template <typename TargetTag> template <typename TargetTag>
vec<T,N,TargetTag> ChangeTag() vec<T,N,TargetTag> ChangeTag() const &
{ {
return vec<T,N,TargetTag>(m_Array); return vec<T,N,TargetTag>(m_Array);
} }
template <typename TargetTag>
vec<T,N,TargetTag> ChangeTag() &&
{
return vec<T,N,TargetTag>(std::move(*this));
}
// Structured binding support for N == 2 // Structured binding support for N == 2
template<size_t I> template<size_t I>
const T& get() const const T& get() const