Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4720 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Class matrix : comprend pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Class matrix : comprend pas

n°1594885
vincent0
Posté le 02-08-2007 à 12:48:13  profilanswer
 

Bonjour,
 
J'ai vu ceci dans un code source (simplifié) :

Code :
  1. class CMatrix4
  2. {
  3.         float& operator ()(std::size_t i, std::size_t j)
  4.         {
  5.                 return operator float*()[i + 4 * j];
  6.         }
  7.        const float& operator ()(std::size_t i, std::size_t j) const
  8.        {
  9.               return operator ()(i, j);
  10.        }
  11.         float a11, a21, a31, a41;
  12.         float a12, a22, a32, a42;
  13.         float a13, a23, a33, a43;
  14.         float a14, a24, a34, a44;
  15. };


 
Comment fait-il pour aller récupérer la valeur de "a23" si l'ont fait Matrix(2, 3), je comprend pas dutout le code !
 
Merci d'avance...


Message édité par vincent0 le 02-08-2007 à 12:50:16
mood
Publicité
Posté le 02-08-2007 à 12:48:13  profilanswer
 

n°1594896
bjone
Insert booze to continue
Posté le 02-08-2007 à 12:57:13  profilanswer
 

les floats sont les uns à la suite des autres, l'indice du float [i,j] est calculé et passé à l'opérateur [] (qui sors le float qui va bien à partir de l'indice)

n°1594899
vincent0
Posté le 02-08-2007 à 13:02:51  profilanswer
 

Merci, Et n'importe quel compilateur nous assure que tous les float seront aligné en mémoire ? Ne vaudrait t-il pas mieux faire un tableau de 4x4 ?

n°1594923
durkheim
Posté le 02-08-2007 à 13:38:50  profilanswer
 

Je trouve ça assez porc en fait comme codage, mais je suis loin d'être un expert.
Le code à l'avantage d'être compact et plus rapide qu'une gestion de tableaux. Si c'est une classe critique, la rapidité à sans doute primé devant la facilité de compréhension/la portabilité du code.
Je n'ai jamais vu de compilo ne pas mettre les trucs les uns à la suite des autres en tout cas.

Message cité 2 fois
Message édité par durkheim le 02-08-2007 à 13:39:45
n°1594979
vincent0
Posté le 02-08-2007 à 15:03:20  profilanswer
 

Merci,
 
Oui c'est une classe critique, toutes les fonctions membres sont inline et c'est pour une moteur 3d.

n°1595011
Un Program​meur
Posté le 02-08-2007 à 15:42:25  profilanswer
 

vincent0 a écrit :

Merci, Et n'importe quel compilateur nous assure que tous les float seront aligné en mémoire ?


 
Il n'y a pas de garantie formelle.  Je ne vois pas de raison pour un compilateur de ne pas le faire.
 

Citation :

Ne vaudrait t-il pas mieux faire un tableau de 4x4 ?


 
Si.

n°1595013
Un Program​meur
Posté le 02-08-2007 à 15:43:15  profilanswer
 

durkheim a écrit :

Le code à l'avantage d'être compact et plus rapide qu'une gestion de tableaux.


 
Tu as des mesures?  Je ne vois a priori pas de raison.

n°1595016
durkheim
Posté le 02-08-2007 à 15:47:45  profilanswer
 

Je pensais à une gestion de tableaux comme avec des vector, array, et autres "tableaux " (listes si tu préfères).
 
Après, je suis d'accord que pour une déclaration de tableau simple ce n'est pas évident, mais il y a forcément une raison, sinon il n'aurait pas redéfini l'opérateur. Peut être une optimisation du compilo?

n°1595017
Taz
bisounours-codeur
Posté le 02-08-2007 à 15:48:49  profilanswer
 

#
      const float& operator ()(std::size_t i, std::size_t j) const
#
      {
#
             return operator ()(i, j);
#
      }
#
 
 
 
while (1); suffit

n°1595187
Joel F
Real men use unique_ptr
Posté le 02-08-2007 à 19:22:34  profilanswer
 

durkheim a écrit :


Le code à l'avantage d'être compact et plus rapide qu'une gestion de tableaux
.


 
[:aloy] si on est en 1978 oui, de nos jours, un bon vieux float[9] aurais suffit :o
ou std::vector :o

mood
Publicité
Posté le 02-08-2007 à 19:22:34  profilanswer
 

n°1595192
Un Program​meur
Posté le 02-08-2007 à 19:26:40  profilanswer
 

Joel F a écrit :


si on est en 1978 oui, de nos jours, un bon vieux float[9] aurais suffit :o


 
En C++ en 78?  Tu travaillais avec BS sur C with Classes à ATT?
 
Je doute qu'il y ait jamais eu beaucoup de différences entre le hack ci-dessus, un float[16] et un float[4][4].
 

Citation :

ou std::vector :o


 
Allocation dynamique garantie... voir la différence n'est pas invraisemblable.

n°1595193
bjone
Insert booze to continue
Posté le 02-08-2007 à 19:30:32  profilanswer
 

Taz a écrit :

#
      const float& operator ()(std::size_t i, std::size_t j) const
#
      {
#
             return operator ()(i, j);
#
      }
#
 
 
 
while (1); suffit


 
tiens exact :D

n°1595226
Joel F
Real men use unique_ptr
Posté le 02-08-2007 à 21:39:20  profilanswer
 

Un Programmeur a écrit :


En C++ en 78?  Tu travaillais avec BS sur C with Classes à ATT?


bon :
http://fr.wikipedia.org/wiki/Hyper [...] torique%29
:o
 

Un Programmeur a écrit :


Allocation dynamique garantie... voir la différence n'est pas invraisemblable.


Pour avoir bosser sur ce genre de bench pendant 4 ans ... c'ets assez négligable.
Par contre, le temps d'accés , c'est pas DU TOUT le même ordre de grandeur entre vector et []


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Class matrix : comprend pas

 

Sujets relatifs
Je ne comprend pas d'ou vient cet ecart de couleurcomment linker une class as2 avec un mc dynamique ?
LockFile : comprend pas ses arguments[PHP] Imbrication de méthodes dans une class
Utilisation d'une class de connexion Mysqlformulaire plus class PDF
[RoR] Class "read-only"[Opengl] stencil buffer : comprend pas son fonctionnement
Débutant en class[dotNET] Soumission d'une class de communication en réseau
Plus de sujets relatifs à : Class matrix : comprend pas


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)