004
12.06.2007, 12:01 Uhr
0xdeadbeef
Gott (Operator)
|
Was du machen kannst, ist, Foo eine abstrakte Klasse zu machen - im Grunde sowas wie ein Java-Interface, davon dann eine template abzuleiten, und über eine generator-Funktion Das Verhalten zu emulieren. Quasi
C++: |
class Foo { public: virtual ~Foo() { } virtual void do_something() = 0; };
template<typename T> class Foo_concrete : public Foo{ public: virtual void do_something() { std::copy(container_.begin(), container_.end(), std::ostream_iterator<typename T::value_type>(std::cout, " ")); } private: T container_; };
template<typename T> Foo *generate_foo(T container) { return new Foo_concrete<T>(container); }
|
...sowas in der Art.
Iteratoren wären auch denkbar, da musste aber aufpassen, dass die gültig bleiben. So oder so musst du zur Compilezeit wissen, was du da eigentlich hast. Ich für meinen Teil würde wahrscheinlich einfach die template direkt verwenden - welchen container du übergibst, weißt du ja dann schon. Und es ist ja auch ein bisschen so, dass unterschiedliche Container unterschiedlich behandelt werden müssen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 12.06.2007 um 12:04 Uhr von 0xdeadbeef editiert. |