Policy-Based Design

Uwaga! Informacje na tej stronie mają ponad 6 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

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

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2025