Wed
30
May 2007
class DeletePolicy { public: template <typename T> static void Destroy(T *p) { delete p; } }; class ReleasePolicy { public: template <typename T> static void Destroy(T *p) { if (p) p->Release(); } }; class scoped_ptr<typename T, typename PolicyT = DeletePolicy> { public: explicit scoped_ptr(T *p = NULL) : m_Ptr(p) { } ~scoped_ptr() { PolicyT::template Destroy<T>(m_Ptr); } // ... }; scoped_ptr<int, DeletePolicy> p1; scoped_ptr<IDirect3DTexture9, ReleasePolicy> t1;
To przykład techniki zwanej Policy-Based Design, którą wynalazł Andrei Alexandrescu. Wszystkich zainteresowanych zabawami z językiem C++ zachęcam do zgłębiania tematu. Szablony to nie jest lekarstwo na wszystkie (jakże liczne) problemy rodzące się podczas programowania w tym języku, ale to jedna z potężnych i zaawansowanych technik. Znałem ją już wcześniej, ale teraz doceniłem i użyłem. Jak to się mówi w komentarzach na Allegro: Polecam! :)
Comments | #c++ #algorithms Share