2017-12-15 13 views
0

QVariantQVector과 함께 사용하는 방법이 있습니까?QVector에서 QVariant를 사용할 수 있습니까?

나는 예를 들어, 두 개의 벡터를 비교하는 기능을 구현해야합니다 : 예를 들어 매개 변수에 의해 동일한 데이터 유형이 항상 것 통과

#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>); 

위의 코드를 실행하려고하면 다음 오류 메시지가 표시됩니다.

error: no matching function for call to 'compareVectors'

참고 : Qt 5.3을 사용하고 있습니다.

+0

'QVector'가 아닌'std :: vector'를 사용하십시오. Qt 컨테이너 클래스는 일반적으로 std 컨테이너보다 성능이 떨어지고 여러 가지 이상한 단점이 있으며 더 이상 유지되지 않으며 Qt 사람들도 API 경계를 통해 강제로 사용하는 경우를 제외하고는 사용하지 말 것을 권장합니다. –

답변

5

인수 유형이 QVector<QVariant> 인 경우 QVector<int> (또는 QVector<double>)을 사용할 수 없습니다.

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; 
}