Есть ли способ использовать QVariant с QVector?

Есть ли способ использовать QVariant с QVector?

Мне нужно было бы реализовать функцию для сравнения двух векторов, например:

#include <QDebug>
#include <QVector>
#include <QString>

bool compareVectors(QVector<QVariant> vec1, QVector<QVariant> vec2)
{
    qDebug() << "Comparing vectors!";

    if( vec1 != vec2 )
    {
        qDebug() << "The vectors are different!";
        return false;
    }

    qDebug() << "The vectors are equal!";
    return true;
}

int main()
{
    QVector<double> v1;
    QVector<double> v2;
    v1 << 1 << 2;
    v2 << 3 << 4;

    QVector<QString> v3;
    QVector<QString> v4;
    v3 << "1" << "2";
    v4 << "3" << "4";

    compareVectors(v1, v1);
    compareVectors(v3, v4);

    return 0;
}

Два вектора, передаваемые параметром, всегда будут иметь один и тот же тип данных, например:

compareVectors(QVector<int>, QVector<int>);
compareVectors(QVector<double>, QVector<double>);
compareVectors(QVector<QColor>, QVector<QColor>);
compareVectors(QVector<QString>, QVector<QString>);

Когда я пытаюсь запустить приведенный выше код, я получаю следующее сообщение об ошибке:

ошибка: нет функции сопоставления для вызова 'compareVectors'

Примечание. Я использую Qt 5.3.


person KelvinS    schedule 15.12.2017    source источник
comment
Используйте std::vector, а не QVector. Контейнерные классы Qt являются устаревшей вещью, обычно работают хуже, чем стандартные контейнеры, имеют различные странные причуды, на самом деле больше не поддерживаются, и даже люди Qt рекомендуют против их использования, за исключением случаев, когда ограничения API вынуждают вас.   -  person Jesper Juhl    schedule 15.12.2017


Ответы (1)


Вы не можете использовать QVector<int> (или QVector<double>), когда тип аргумента QVector<QVariant>.

Я бы предложил сделать compareVectors шаблоном функции.

template <typename T>
bool compareVectors(QVector<T> vec1, QVector<T> vec2)
{
    qDebug() << "Comparing vectors!";

    if( vec1 != vec2 )
    {
        qDebug() << "The vectors are different!";
        return false;
    }

    qDebug() << "The vectors are equal!";
    return true;
}
person R Sahu    schedule 15.12.2017