Bonjour,

Je d�veloppe une librairie qui historiquement �tait proc�durale.
Depuis quelques temps d�j�, notre volont� est de faire des refactorings pour la rendre OO et surtout plus clean.

Hors, avec l'OO, nous rencontrons des probl�mes pour �valuer les valeurs de retour des fonctions en debug.

Jusque l�, lorsque nous voulions voir la valeur d'une variable imbriqu�e dans une structure de donn�es il suffisait de breaker dessus et de survoler la variable dans le code.
Par exemple:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
containerAInst.arrayPtrB[i].valueC // <= En survolant n'importe quelle variable de cette chaine, je pouvais voir sa valeur.
Maintenant, mon code ressemble plus � �a :
> containerA.h <
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
 
#include "containerB.h"
 
class containerA {
private:
  containerB *arrayPtrB; // Un tableau dynamique
 
public:
  containerA() {/*init arrayPtrB*/}
  ~containerA() {/*delete arrayPtrB*/}
 
  containerB& operator[](const unsigned int pIndex);
  containerB& operator[](const unsigned int pIndex) const;
  containerB& mGetContainerBAt(const unsigned int pIndex);
  containerB& mGetContainerBAt(const unsigned int pIndex) const;
}
> containerA.cpp <
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
 
#include "containerA.h"
 
containerB& containerA::mGetContainerBAt(const unsigned int pIndex)
{
  return arrayPtrB[pIndex];
}
 
containerB& containerA::operator[](const unsigned int pIndex)
{
  return mGetContainerBAt(pIndex);
}
 
containerB& containerA::mGetContainerBAt(const unsigned int pIndex) const
{
  return const_cast<containerA*>(this)->mGetContainerBAt(pIndex);
}
 
containerB& containerA::operator[](const unsigned int pIndex) const
{
  return mGetContainerBAt(pIndex);
}
> containerB.hpp <
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
class containerB {
  int valueC; // Oui, c'est public. Il en reste encore quelques uns dans mon code, mais c'est surtout pour l'exemple.
  int valueB;
  bool isC;
}
Mon appel � travers des structures devient donc:
Ou:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
containerAInst.mGetContainerBAt(i).valueC
Le code ci-dessus est tr�s simplifi� : pas de polymorphisme, pas des fonctions virtuelles, juste une surcharge de la fonction mGetContainerBAt et l'op�rateur [].
Pourtant, que je demande � VC d'�valuer l'un ou l'autre de des deux appel ci-dessus, j'ai toujours une erreur.

Apr�s quelques lecture sur le web et quelques tests, je me suis aper�u que le probl�me venait de la surcharge des fonctions. Si je retire les deux fonctions const de mon code, �a marche.
Mais bon, d'une part je suis oblig� de faire des const_cast un peu partout ou ne plus utiliser d'instance const. D'autre part, c'est quand m�me le but du polymorphisme de pouvoir surcharger des fonctions, les red�finir virtuellement etc...

Pour l'instant, je n'ai que des workarrouds non satisfaisants:
1 - Ajouter dans la watch window "containerAInst.arrayPtrB[i].valueC". <= Trop fastidieux � �crire � chaque fois qu'on a besoin d'une valeur... Et en plus ca oblige � connaitre l'impl�mentation de la fonction appel�e.
2 - Utiliser les autos qui affichent les valeurs de retour des derniers appels. <= Satisfaisant lorsque le type de retour est primitif, mais lorsque c'est une instance d'un objet, on ne peut pas voir toutes les valeurs, ni naviguer dedans.

J'imagine qu'il y a une solution � mon probl�me, pas mal de dev. travaillent sous VC++ au quotidien, mais je n'arrive pas � la trouver.
Pouvez-vous m'aider SVP ?

S'il n'y a pas de solution sous VC++, est-ce que le compilateur d'Intel ou un autre ferait mieux ?

NOTE: Mon code est compos� d'une interface graphique manag�e et d'une lib statique native (pas de MFC). Je d�veloppais sous VS2010 compil� en vc9 (le probl�me �tait identique), mais je viens de migrer mon code en vc11 sous VS2012 depuis quelques jours.

d'avance pour votre aide !!
Ju