Ошибка при вызове шаблонной функции template class T, class N>
Есть функция быстрой сортировки, которая должна работать с любой коллекцией, которая хранит любой тип данных. Код:
template <template<class> typename T, class N>
void quick_sort_stl(T<N> begin, T<N> end)
{
if(distance(begin, end) > 2)
{
N mid = *begin;
auto it = partition(begin, end, [=](const N& a) {return mid > a;});
auto it2 = partition(it, end, [=](const N& a) {return mid == a;});
//lower
quick_sort_stl(begin, it);
//higher
quick_sort_stl(it2, end);
}
else
{
auto it2 = begin;
it2++;
if(distance(begin, end) == 2 && *begin > *it2)
{
iter_swap(begin, it2);
}
}
}
main:
int main()
{
srand(time(0));
vector<int> abc(10);
generate(abc.begin(), abc.end(), rand);
quick_sort_stl<vector<int>::iterator, int>(abc.begin(), abc.end());
return 0;
}
когда пытаюсь вызвать функцию, компилятор выдает след. ошибку: "candidate template ignored: invalid explicitly-specified argument for template parameter 'T'" Почему выдает ошибку? Помогите разобраться.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Будьте проще, и все у вас получится :)
Не скажу, что это идеальный метод, надо бы еще убедиться, что это именно итератор etc etc, но... работает же :)
template <typename T>
void quick_sort_stl(T begin, T end)
{
using N = typename decay<decltype(*begin)>::type;
if(distance(begin, end) > 2)
...
quick_sort_stl(abc.begin(), abc.end());