Const bei Template-Forward-Klassen
Verfasst: Mi Aug 20, 2014 5:34 pm
Moin,
vielleicht fällt einem ja was sinnvolles zu meinem derzeitigem Problem ein:
Ich habe eine Klasse, die einen Shared-Pointer hält und nichts anderes tut, als auf eine Implementation zu verweisen:
Diese Segmente haben - dank des Pointers eine feste Größe und machen nichts weiter als auf die Implementierungsklassen zu verweisen. Da ich die Segmente mit Implementierungen erzeugen können muss, die const sind, muss mein Shared-Pointer auf ein const-Objekt (SegmentImpl) zeigen.
Das klappte bisher eigentlich wunderbar - nur nun muss ich Funktionen weiterleiten, die nicht als const deklariert sind.
Die Lösung für mein Problem wäre, wenn ich Segment erklären könnte, dass ich mit einem Konstruktor für (SegmentImpl const *) auch nur Segment-Elemente erzeugen kann, die const sind - die entsprechend die setSource-Funktion nicht rufen könnten.
Fällt dazu jemandem eine elegante Lösung ein, die über eine statische Frickelei hinaus reicht?
vielleicht fällt einem ja was sinnvolles zu meinem derzeitigem Problem ein:
Ich habe eine Klasse, die einen Shared-Pointer hält und nichts anderes tut, als auf eine Implementation zu verweisen:
Code: Alles auswählen
class Segment : public SegmentInterface
{
private:
shared_ptr< SegmentImpl const > _implementation;
public:
Segment( SegmentImpl const * impl )
: _implementation( impl ) {}
...
virtual bool setSource( Point2d & newPosition )
{ return _implementation->setSource( newPosition ); }
...
Das klappte bisher eigentlich wunderbar - nur nun muss ich Funktionen weiterleiten, die nicht als const deklariert sind.
Die Lösung für mein Problem wäre, wenn ich Segment erklären könnte, dass ich mit einem Konstruktor für (SegmentImpl const *) auch nur Segment-Elemente erzeugen kann, die const sind - die entsprechend die setSource-Funktion nicht rufen könnten.
Fällt dazu jemandem eine elegante Lösung ein, die über eine statische Frickelei hinaus reicht?