Bonjour à tous,
Dans le but de pratiquer un peu, je me propose de réaliser une bibliothèque permettant de réaliser des calculs vectoriels de base.
Je suis donc parti sur des structures du genre :
et un fonctionnement similaire pour les tenseurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct vec3 { float x,y,z; };
Accéder aux valeurs de la structure via les opérateurs '.' est une bonne chose. Cependant, de manière à faciliter un peu les claculs ultérieurs, je souhaiterais pouvoir accéder aux différentes variables (x, y, z) via l'opérateur [] où, vec[0] retourne x, vec[1] retourne y etc... Idem pour les tenseurs: mat[0][0] retourne xx, mat[0][1] retourne xy etc..
L'objectif est donc, comme présenté précédemment, de simplifier les algorithmes, mais aussi de laisser la possibilité à l'utilisateur d’appeler les valeurs soit via vec.x soit via vec[0].
Je me suis dit que ce type de fonctionnement devais être trivial dans le sens où vec.x est sensé être à l'adresse &vec, vec.y est sensé être à l'adresse &vec+sizeof(float) etc... Mais visiblement, je dois ajuster mon approche car *(&vec+sizeof(float)) est de type vec3 et non float.
Sans nécessairement me souffler la solution, une idée de la direction à prendre pour que je puisse répondre à ma problématique ?
Merci d'avance.
EDIT :
Comme à mon habitude, poster mon message ici m'a apporté la réponse : "pourquoi diable coller un sizeof au milieu de tout ça ???"
Réponse :
ceci fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 struct vec3 { float x{.0f}; float y{.0f}; float z{.0f}; float & operator[](size_t const id) { return *(&x+id); } };
Partager