VariantConverter for Vector3D

After further investigation, here’s a better implementation. @matkatmusic offered me some help on discord by suggesting using Array instead of raw pointers. I also realized var has Array related methods so I have landed on this implementation (using C++ 17 syntax):

template <typename T>
struct VariantConverter<Vector3D<T>>
{
    static Vector3D<T> fromVar (const var& v)
    {
        if (auto * arr = v.getArray();
            arr != nullptr && arr->size() == NUM_VECTOR_ELEMENTS)
            return { v[X_INDEX], v[Y_INDEX], v[Z_INDEX] };
        return {};
    }
    
    static var toVar (const Vector3D<T> & t)
    {
        Array<T, DummyCriticalSection, NUM_VECTOR_ELEMENTS> arr;
        arr.set (X_INDEX, t.x);
        arr.set (Y_INDEX, t.y);
        arr.set (Z_INDEX, t.z);
        return { std::move (arr) };
    }
    
    static constexpr size_t NUM_VECTOR_ELEMENTS = 3;
    static constexpr size_t X_INDEX = 0;
    static constexpr size_t Y_INDEX = 1;
    static constexpr size_t Z_INDEX = 2;
};