Одним из способов является предоставление шаблонов функций-членов, которые принимают шаблон arg для использования с политикой. Например:
template<class T, template<class> class Policy = FactorPolicy>
struct Map
{
template <typename V>
void foo(const Policy<V> &p)
{
}
};
Тогда в основном:
Map<int,FactorPolicy> m;
m.foo(FactorPolicy<double>(5.0));
Еще одна возможность - указать его как часть создания шаблона карты, добавив третий аргумент шаблона в Map:
template<class T, template<class> class Policy = FactorPolicy,
class V = double>
struct Map
{
void foo(const V &value)
{
Policy<V> policy(value);
}
};
Тогда:
Map<int,FactorPolicy,double> m;
m.foo(5.0);