J'essaie d'écrire une classe de vecteur mathématique. Une première version va comme:Constructeur spécialisé pour la classe Vector
template <typename T, unsigned int n>
struct Vector {
Vector<T, n>(T t = T()) // default
{
for (int i = 0; i < n; i++)
{
data[i] = t;
}
}
Vector<T, n>(const Vector<T, n> &aVector)
{
for (unsigned int i = 0; i < n; i++)
{
data[i] = aVector.data[i];
}
}
Vector<T, n>(const T arr[n])
{
for (unsigned int i = 0; i < n; i++)
{
data[i] = arr[i];
}
}
T& operator[](unsigned int i);
const T& operator[](unsigned int i) const;
Vector<T, n>& operator=(const Vector<T, n> &aVector);
void normalise();
T data[n];
};
J'ai aussi les opérateurs (+, *, etc.) en dehors de la classe déclarai, ainsi que deux autres classes.
Voici la chose cependant. Pour les vecteurs de longueur 2, 3, 4, j'aimerais avoir un constructeur (ou une fonction) qui prend x, y (pour Vec2), x, y, z ou x, y, z, w comme paramètres.
Cependant, il semble que vous ne puissiez pas faire de constructeurs spécialisés à cette fin. Comment dois-je procéder dans ce cas? Dois-je complètement spécialiser trois cas? Cela ne veut-il pas dire que je dois réécrire des morceaux de code? J'ai également une classe Matrix similaire (Matrix), et je suis sûr que je vais avoir besoin de constructeurs pour la rotation, la traduction, la mise à l'échelle, etc. Je suppose que je vais devoir surmonter un problème similaire.
Si vous voyez
J'ai aussi les opérateurs (+, *, etc.) en dehors de la classe déclarai, ainsi que deux autres fonctions (points, croix, etc.).
Voici la chose cependant. Pour les vecteurs de longueur 2, 3, 4, j'aimerais avoir un constructeur (ou une fonction) qui prend x, y (pour Vec2), x, y, z ou x, y, z, w comme paramètres.
Cependant, il semble que vous ne puissiez pas faire de constructeurs spécialisés à cette fin. Comment dois-je procéder dans ce cas? Dois-je complètement spécialiser trois cas? Cela ne veut-il pas dire que je dois réécrire des morceaux de code? J'ai également une classe Matrix similaire (Matrix), et je suis sûr que je vais avoir besoin de constructeurs pour la rotation, la traduction, la mise à l'échelle, etc. Je suppose que je vais devoir surmonter un problème similaire.
Si vous voyez quelque chose dans le code qui vous semble erroné, n'hésitez pas à le signaler en passant.
EDIT: Dans le cas où je n'étais pas assez clair, les tableaux sont censés être unidimensionnels, et tous ses composants sont du même type. Les spécialisations sont pour les tableaux avec 2, 3 et 4 éléments.
Sur une note de côté - votre classe 'vECTOR' n'a pas besoin constructeur de copie défini par l'utilisateur ou opérateur d'affectation. – PaulMcKenzie
Pourquoi pas? – spliblib
'Pour les vecteurs de longueur 2, 3, 4' Voulez-vous dire le nombre de * dimensions * peut être 2, 3 ou 4? – PaulMcKenzie