Политики обычно являются параметрами, которые влияют на поведение класса.
Фактически довольно сложно извлечь политики из класса, и более сложным является то, что политики должны охватывать ортогональные концепции, чтобы вы могли изменить одно, не влияя на другие ... что довольно сложно, как вы можете себе представить.
Если вы хотите увидеть хороший пример использования Политики, посмотрите Loki::Singleton
, что полностью продемонстрировано в Книге.
template
<
typename T,
template <class> class CreationPolicy = CreateUsingNew,
template <class> class LifetimePolicy = DefaultLifetime,
template <class, class> class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL,
class MutexPolicy = LOKI_DEFAULT_MUTEX
>
class SingletonHolder;
Впечатляет, не правда ли?
Принципы разработки на основе политик заключаются в том, что вы пытаетесь разложить различные действия вашего класса, чтобы вы могли самостоятельно рассуждать о них.
Что ж, теперь я должен признать, что меня не устраивает идея требовать класса с заданным количеством параметров шаблона, я лично предпочел бы что-то вместе:
template
<
class T,
class CreationPolicy = CreateUsingNew<T>,
class LifetimePolicy = DefaultLifeTime<T>,
class MutexPolicy = LOKI_DEFAULT_MUTEX,
template <class, class> class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL
>
class SingletonHolder;
С последним ничего не поделаешь, вы должны передать его самому классу SingletonHolder
.
Однако я считаю, что здесь проще обмениваться политиками, это позволяет мне определять политики как:
template <class T, size_t Param> MyCreationPolicy;
И использовать напрямую, без необходимости оборачивать его для заданного значения param, чтобы оно совпадало с подписью.