#ifndef POLICYSELECTOR_H
#define POLICYSELECTOR_H

#include <policydefault.h>

/*!
\brief  The client passes in the policy and it is instantiated.

  By overloading the typedefs different policies can be configured.
  Use the policyov1, policyov2, policyov3.
*/
template < typename T=policydefault >
class policyselector : public T
{
public:

  /** The first policy. */
  typename T::P1 p1;
  /** The second policy. */
  typename T::P2 p2;
  /** The third policy. */
  typename T::P3 p3;
};

/*!
\brief Override the first policy.
*/
template< typename P, typename PI=policydefault >
class policyov1 : public PI
{
public:
  typedef P P1;
};

/*!
\brief Override the second policy.
*/
template< typename P, typename PI=policydefault >
class policyov2 : public PI
{
public:
  typedef P P2;
};

/*!
\brief Override the third policy.
*/
template< typename P, typename PI=policydefault >
class policyov3 : public PI
{
public:
  typedef P P3;
};


#endif



