Bonsoir,

Je me remet doucement au C++ et je me pause quelques petites question.
Je développe actuellement sou VC++ et j'ai essayer de compiler mon code avec G++(V4.3.2) sous debian.
J'ai eu quelques surprises (VC++ est bien plus tolérant que g++), dont notamment un refus catégorique du compilateur(G++) de compiler quelque chose comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class C
{
public:
//...
  setPosition(Position &pos);
};
 
//...
 
int main(int argc, char *arv[])
{
  //...
  aC.setPosition(Position(x, y, z));
  //...
Le comportement que j'attendrais serais de créer une instance de Position dans la stack, et de passer la référence a la fonction setPosition, avant de détruire l'objet.
Mais cela ne semble pas du gout de GCC...
Quand au compilateur de VC++, je ne sais pas non plus si il fait bien cela ou d'autres bidouilles bien louche.

Du coup, si je veux que la ligne précédente du main compile, je me retrouve a surcharger setPosition pour qu'il prenne un Position par copie.

---

Deuxième petite question, j'ai voulus imposer a ma classe Point3D d'être "Computable", pour ce faire j'ai écris quelque chose dans ce genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
33
34
35
 
template <class C, class T>
class Computable
{
  //...
  virtual C operator + (const C &c) const = 0;
  virtual C operator * (const T scal) const = 0;
  //...
};
 
template <class T>
class Vector
{
  virtual ~Vector() = 0;
};
 
template <class T>
inline
Vector::~Vector()
{};
 
//...
template <class T>
class Vector3D<T> : public Vector<T>, public Computable< Vector<T>, T>
{
  //... Implementation des methodes de la forme
 
  //Retourne un nouveau vecteur, C = A + B
  Vector3D<T> operator + (const Vector3D<T> &vec) const;
 
  //Retourne un nouveau vecteur, somme du scalaire sur chacune des coords
  Vector3D<T> operator + (const T scal) const;
 
  //...
};
Donc, je me retrouve avec des Vector3D<float> dont je suis assurer de pouvoir les manipuler comme des nombres. (Produit, quotient, différence, somme, comparaison, etc...)

Je ne sais pas si c'est très propre, j'y suis aller a l'instinct, mais d'après le debugger de VC++, Vect3D contient deux pointeurs vers une vtable, un pour chacun de ses parents.
J'ai zapper quelque chose qui implique que Vector3D doit nécessairement avoir un pointeur sur la Vtable de Computable? (Parce qu'en fin de compte, il n'y a aucune méthode implémenté dans Computable, c'est un peu comme une "interface"...)

Voila, ce sont mes questions existentiel de la journée.