2010-12-21 2 views
0

Ich arbeite an einem System, das einen Datenstrom aufnimmt und in verschiedene Ausgabeströme sortiert. Die Objekte, die das System durchlaufen, sind alle vom gleichen Typ, aber es ist notwendig, dass der Endbenutzer des Systems bestimmte Änderungen an dem Typ vornehmen kann, der durch das System durch Unterklassenbildung der Klasse der Datenobjekte durchgeführt wird.Hoch- und Runterwandeln nach dem Hinzufügen neuer statischer Konstanten zu abgeleiteten Typen

Inspiriert von der akzeptierten Antwort auf diese Frage Base enum class inheritance, meine Datenobjektklasse wird eine Reihe von konstanten Werten bereitstellen. Benutzer werden in der Lage sein, die Datenklasse abzuleiten und neue statische Konstanten int hinzuzufügen. Zum Beispiel:

class Base  /* provided as part of system */ 
{ 
public: 
    static const int OUTPUT_STREAM_TYPE_1 = 0; 
    static const int OUTPUT_STREAM_TYPE_2 = 1; 

    int mSomeMemberVariables; 

    bool SomeMethods(int stream_type); 
} 

class Derived : public Base  /* provided by user */ 
{ 
public: 
    static const int OUTPUT_STREAM_TYPE_3 = 2; 
} 

Meine Frage ist, kann mein Benutzer Guss sicher Base abgeleitet durch das System zur Weiterleitung, und dann zurück zu Abgeleitet, sobald sie empfangen sie in je nachdem, was streamen das System ausgewählt? Ich vermute ja, weil Statik nicht in Instanzen enthalten ist, also sollten Instanzen von Base und Derived identisch sein. Aber funktioniert das garantiert?

Antwort

0

Ich glaube nicht static_cast wird funktionieren. dynamic_cast funktioniert garantiert, aber Sie müssen mindestens eine virtuelle Funktion in der Basisklasse haben, und Sie müssen auf ein Null-Ergebnis prüfen. reinterpret_cast ist nicht garantiert, sollte aber bei den meisten Compilern funktionieren, vorausgesetzt, es gibt keine Mehrfachvererbung.

Verwandte Themen