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