Optionale Operation in Templates
-
Ich arbeite zzt an einem Container der Pointer speichern soll. Ich würde den Container gern so konfigurierbar machen das man auswhählen kann was beim entfernen eines Pointers pasieren soll (nichts, delete, delete[], ->Release). Die ersten 3 Optionen wären ja nicht schwer, aber ->Release geht ja nicht bei allen, womit für mich ein einfaches Switch ausfällt. Gibt es für dieses Problem einen eleganten Lösungsansatz?
-
template<typename T, template<typename> class DestructionPolicy> struct Container { void something(T* ptr) { DestructionPolicy<T>::destroy(ptr); } }; template<typename T> struct Delete { static void destroy(T* ptr) { delete ptr; } }; template<typename T> struct ArrayDelete { static void destroy(T* ptr) { delete [] ptr; } }; template<typename T> struct Release { static void destroy(T* ptr) { ptr->release(); } };Anwendung dann z.b. so:
struct foo { void release() {} }; Container<foo, Release> cont; cont.something(new foo);Wenn der benutzer was anderes will, schreibt er sich eben eine andere Policy.
Nennt sich übrigens Policy-based design. Einfach mal googeln.
-
Danke werd ich mir mal näher ansehen.