Аргумент шаблона C для аргумента шаблона

#c #templates

#c #шаблоны

Вопрос:

Посмотрите на этот код:

 template<class T, class Compare>
void foo(const std::set<T, Compare> amp; bar)
{
    // here I need the comparative function BUT with another type
    // like this:
    if (Compare<float>()(...))
}
  

Что-то вроде этого, но это не работает:

 template<class T, class Compare>
void foo(const std::set<T, Compare<T>> amp; bar)
...
  

Возможно ли это?

Ответ №1:

Вам нужен параметр шаблона шаблона:

 template<class T, template<class> class Compare>
  

Теперь Compare параметр шаблона является самим шаблоном.