1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| template<class T, unsigned int d> class Vector{
private:
T coord[d];
public:
Vector(const T (&coords)[d]){
memcpy(coord, coords, sizeof(T)*d);
}
template<typename... Ts>
Vector(Ts&&... coords) : coord{std::forward<Ts>(coords)...} {
static_assert(sizeof...(Ts) == d, "You must provide d arguments.");
}
// Tout plein de fonctions membres très utiles
// ...
};
// Les spécialisations suivantes ne sont évidement pas correctes !
template<class T> class Vector<T, 2>{
public:
T& x;
T& y;
Vector(const T (&coords)[2]): coord({coord[0],coords[1]}), x(coord[0]), y(coord[1]){}
Vector(T x, T y) : coord({x,y}), x(coord[0]), y(coord[1]) {}
};
template<class T> class Vector<T, 3>{
public:
T& x;
T& y;
T& z;
Vector(const T (&coords)[3]): x(coord[0]), y(coord[1]), z(coord[2]){
memcpy(coord, coords, sizeof(T)*3);
}
Vector(T x, T y, T z) : coord{x, y, z}, x(coord[0]), y(coord[1]), z(coord[2]) {}
}; |
Partager