statische variable in erbender klasse analog zu rein virtueller vererbung



  • moin zusammen!
    ich möchte gerne vergleichbar der reinen virtuellen vererbung auf eine statische variable in der erbenden klasse zugreifen. geht das?

    class Base {
    		//bool getWhateverStaticBool() { return Derived::whatever; }
    	protected:
    		// jede erbende klasse muss eine statische variable whatever haben
    		//virtual static bool whatever = 0;	// geht ja leider nicht
    	};
    
    	class A : public Base {
    	protected:
    		static bool whatever;
    	};
    
    	bool A::whatever = true;
    
    	class B : public Base {
    	protected:
    		static bool whatever;
    	};
    
    	bool B::whatever = false;
    


  • Das geht nicht, du musst den Umweg über virtuelle Methoden benutzen.



  • danke,
    ist es irgendwie möglich, dass alle instanzen von A dieselbe bool nutzen (wie bei static eben) und ich über virtuelle methoden in Base darauf zugreifen kann?



  • Naja so:

    class Basis
    {
    public:
        virtual bool &getTheStaticBool() = 0;
    }
    
    class Abgeleitet1
    {
    private:
        static bool TheBool;
    public:
        bool &getTheStaticBool() { return TheBool; }
    }
    

    Nur, warum brauchst du das, sieht mir suspekt aus.



  • aaaaah, cool, bin ich so nicht drauf gekommen.

    meine situation:
    ich erstelle pdfs mit beliebig vielen seiten, es gibt aber nur 4 arten von seiten. für jede art soll für alle ihre instanzen dasselbe bool gelten.
    ich möchte über vererbung auf die bool der seitenart zugreifen ohne wissen zu müssen, was für eine art seite es ist.
    ich könnte natürlich auch irgendwo zentral eine bool pro seitenart speichern, aber das ganze wird sicherlich um weitere seitenarten erweitert werden, weswegen vererbung deutlich eleganter wäre.



  • es scheint noch weitere probleme beim exportieren einer statischen member variablen zu geben, wenn diese ihrerseits in eine dll importiert wird:
    http://stackoverflow.com/questions/25390133/unresolved-external-on-static-data-member-from-another-dll
    entsprechende fehlermeldung ergaben sich bei mir.

    gibt es einen anderen weg, wie im vorherigen post beschrieben ein bool für jede ART von seite zu verwenden?



  • mael15 schrieb:

    es scheint noch weitere probleme beim exportieren einer statischen member variablen zu geben, wenn diese ihrerseits in eine dll importiert wird:
    http://stackoverflow.com/questions/25390133/unresolved-external-on-static-data-member-from-another-dll

    Du machst was falsch, bei dem was roflo vorgeschlagen hat, dürfte es keine solchen Probleme geben.

    Mir gefällt der Ansatz aber nicht. Alles was irgendwie statisch oder global ist, verbaut dir später die Möglichkeit, etwas einfach umzubauen. Versuch das lieber in ein Objekt zu stecken, z.B. GenerationOptions oder so.



  • Mechanics schrieb:

    Du machst was falsch, bei dem was roflo vorgeschlagen hat, dürfte es keine solchen Probleme geben.

    Naja, die Variable muss natürlich auch definiert werden (so wie im Eingangspost), sonst gibt's den Linkerfehler.



  • Ich weiß nicht, ob du AFX_EXT_CLASS benutzt (kenn ich nicht), vielleicht ist das das Problem.


Log in to reply