000
10.08.2008, 16:22 Uhr
xXx
Devil
|
Also, folgendes: Ich habe zwei Module: foo u. bar. foo => class a u. braucht zugriff auf diese (einmalige Instanz, allerdings) bar => class b : public a u. braucht ebenfalls zugriff auf einmalige Instanz.
Nun soll aber der erste Aufruf der Funktion instance (static in a, um einmalige instanz zu ermöglichen) entscheiden, ob eine Instanz von derived oder base genutzt werden soll. Und nach dem ersten aufruf soll es egal sein, ob man a::instance oder b::instance aufruft und beidesmal die selbe instanz zurück gegeben werden.
Wie könnte man das realisieren?
C++: |
namespace foo { class a : public uncopyable { protected: virtual ~a() {}
public: inline static a& instance() { static std::auto_ptr<a> instance(_create_instance()); return *instance.get(); }
protected: virtual a* _create_instance() const { return new a; }
public: virtual std::ostream& instance_name(std::ostream& out) { return out << "a"; } }; }; // foo
|
C++: |
namespace bar { class b : public a { protected: virtual a* _create_instance() const { return new b; } public: virtual std::ostream& instance_name(std::ostream& out) { return out << "b"; } }; }; // bar
|
C++: |
int main() { bar::b::instance().instance_name(std::cout); // Ausgabe: b foo::a::instance().instance_name(std::cout); // Ausgabe: b }
|
Aber so geht es nicht, da _create_instance() nicht static ist, aber in einer statischen Methode aufgerufen wird.
Jemand eine Idee wie ich das realisieren könnte? Vielen danke schonmal! Dieser Post wurde am 10.08.2008 um 16:22 Uhr von xXx editiert. |