Допустим, у меня есть такой класс:
template< typename T, int nDimensions = 2 >
class Vec
{
private:
std::array< T, nDimensions > elements_;
}
Затем я печатаю несколько разных типов.
typedef Vec< int, 2 > Vec2i;
typedef Vec< int, 3 > Vec3i;
typedef Vec< float, 2 > Vec2f;
typedef Vec< float, 3 > Vec3f;
Каким был бы конструктор, если бы я хотел преобразовать один тип в другой?
Vec2i something(10,20); //10,20
Vec2f somethingElse(something); //10.0f,20.0f
То же самое касается разных размеров:
Vec3f somethingmore(something); //10.0f,20.0f,0.0f
Пока у меня есть:
template<typename F>
Vec(const F& other)
{
for (int i = 0; i < nDimensions; i++)
{
this->elements_[i] = static_cast<F>(other[i]); //I know this is wrong.
}
}
Я не могу найти хороший способ заставить базовый тип другого класса выполнять статическое приведение к каждому элементу, ни хороший способ получить размер других nDimension, чтобы я мог выполнить правильную проверку границ.