Ошибка при вызове шаблонной функции 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());
→ Ссылка