Как преобразовать тип T в шаблонной функции к QPointF

я написал для себя функцию для построения кусочно-линейной зависимости. Написал изначально под QPoint, но теперь появилась необходимость применять её также и с QPointF. Попытался написать шаблонную функцию, однако она не компилируется. Судя по ошибкам типа

ошибка: C2664: "bool (const QPoint &,const QPoint &)": невозможно преобразовать аргумент 2 из "T" в "const QPoint &" with [ T=QPointF ],

я понимаю, что компилятор не знает, как ему преобразовать неопределённый тип к QPointF, однако не понимаю, как мне это преобразование определить. Ниже код самой функции.

void plInterpolation(const QVector<T>* orig, QVector<T>* piecewise, const double precision)
{
    piecewise->reserve(1000);
    typename QVector<T>::const_iterator buf_it1 = orig->begin();
    typename QVector<T>::const_iterator buf_it0 = orig->begin();
    typename QVector<T>::const_iterator buf_end = orig->end() - 1;
    //int j = 0; // текущая позиция вектора piecewise
    piecewise->append(*buf_it1);
    buf_it1 += 2;
    if (buf_it1 > buf_end) {
        *piecewise = QVector<T>(1, T(100, 100));
        return;
    }
    while (buf_it1 != buf_end) {
        piecewise->append(*buf_it1);
        bool isBigger = false;
        do {
            typename QVector<T>::iterator p_it = piecewise->end() - 1;
            double k = static_cast<double>((*p_it).y() - (*(p_it - 1)).y()) / static_cast<double>((*p_it).x() - (*(p_it - 1)).x()); // тангенс угла наклона
            double b = static_cast<double>((*(p_it - 1)).y()) - k * (*(p_it - 1)).x();
            int piece_size = 0;
            typename QVector<T>::const_iterator temp_it = buf_it0;
            while (temp_it != buf_it1) {
                piece_size++;
                temp_it++;
            }
            temp_it = buf_it0;
            for (int i = 0; i < piece_size; i++) {
                double x = (*temp_it).x();
                double y = x * k + b;
                if (abs(y - (*temp_it).y()) > precision) {
                    isBigger = true;
                    i = piece_size;
                }
                temp_it++;
            }
            if (isBigger) {
                *p_it = *(buf_it1 - 1);
                buf_it0 = buf_it1 - 1;
                buf_it1++; // сейчас buf_it1 указывает на элемент, стоящий за *p_it, поэтому инкрементирую его лишь раз
                //piecewise.append(*buf_it1); // здесь сразу добавляю к ломаной новую точку
            }
            else {
                buf_it1++;
                if (buf_it1 != buf_end) {
                    *p_it = *buf_it1; // здесь сразу присваиваю крайней правой точке ломаной новое значение
                } else {
                    isBigger = true;
                }
            }
        } while(!isBigger);
    }
    return;
}

Ответы (0 шт):