2009-03-06 9 views
2

Ich habe eine Wrapper-Klasse, die ihre Arbeit an eine pimpl delegiert, und die pimpl ist ein Zeiger auf eine Basisklasse/Schnittstelle ohne Daten, die auf verschiedene Arten spezialisiert ist.Wie Debug-Informationen für eine abstrakte (?) Pimpl in C++ erhalten?

So:

class Base 
{ 
    void doStuff=0; 
}; 

class Derived 
{ 
    int x,y; 
    void doStuff() 
    { 
     x = (x+y*2)*x; //whatever 
    } 
}; 

class Wrapper 
{ 
    Base* _pimpl; 
    void doStuff() 
    { 
     _pimpl->doStuff(); 
    } 
}; 

Jetzt funktioniert dies die meiste Zeit in Ordnung, aber wenn sie in den Debugger gehen kann ich nicht x, y der abgeleiteten Klasse betrachten (weil es etwas sein könnte). Normalerweise ist das irrelevant, aber wenn etwas schief geht, kann der Zustand von Abgeleitet wichtig sein, aber Pimpl verdunkelt den Zustand zu sehr (wie auch immer, das ist die ursprüngliche Idee eines Pimpls, also kann ich mich wohl nicht beschweren).

Jetzt habe ich eine tostring() -Funktion, die den Zustand für Debug-Zwecke ausgibt, aber fragte mich, ob es eine bessere Lösung, diese Art von Konstrukt in VisualStudio im Besonderen zu debuggen, aber eine allgemeine Lösung wäre besser.

Dank

Antwort

2

einfach halten den Baum im Fenster Auto oder einem der Uhren Fenster Ausbau aus:

alt text http://www.freeimagehosting.net/uploads/626b4a37ee.png

+0

Mmm, ok du hast Recht, aber mein tatsächlicher Code ist komplexer als dieser und es funktioniert nicht richtig ... lass mich herausfinden, warum es nicht funktioniert ... –

+0

Wenn du es von einer Kompilationseinheit machst hat keine Sichtbarkeit der Impl-Klasse Erklärung dann ist es nicht sichtbar –

+0

da gehen wir! Deshalb funktioniert es nicht –

4

Haben Sie versucht, die Variable in Derived * im Fenster Uhr Gießen?

+0

ja das funktioniert, gut, so weit, aber hoffentlich hat jemand eine magische Lösung :) –

+0

Was wäre, mehr magisch? – jmucchiello

Verwandte Themen