簡體   English   中英

用於將QVariant轉換為{自定義類型的c ++函數指針

[英]c++ function pointer used to convert a QVariant to {a custom type

QVariant持有一個QMap對象,該對象將被轉換為自定義類型MyClass或MyClass2。

例:

class MyClass{
   int item1;
   int item2;
   QString string1;
   AnotherClass subclass;
};

class MyClass2{
   int item1;
   QString string1;
   AnotherClass subclass;
};

編寫函數以將QVariant轉換為關聯的類

MyClass QVariantToMyClass1(QVariant);
MyClass2 QVariantToMyClass1(QVariant);

我的問題是,在模板函數中傳遞函數指針的正確方法是什么? 下面顯示的代碼返回錯誤'const class QVariant沒有名為convFunct的成員'

template<class T>
QList<T> QVariantToQList(QVariant & qv,T (* convFunct)() )
{
    // Create the list that will hold the return values
    QList<T> qListOfMembers;
    if(qv.typeName() == "QVariantMap"){
        foreach(QVariant const& mapMember,qv.toMap())
        {
            qListOfMembers.append(mapMember.convFunct());
        }
    }
    else if (qv.typeName() == "QVariantList"){
        foreach(QVariant const& listMember,qv.toList())
        {
            qListOfMembers.append(listMember.convFunct());
        }
    }
    else
    {
        qDebug()<< "QVariantToQList currently is implemented only for QMap and QList types";
        throw ;
    }
    return qListOfMembers;
}

這是前一個問題后續問題 。該問題與此問題之間的區別在於T是'MyClass'或'MyClass2'而不是通常由QVariant持有的類型。

如果我正確理解你的問題, convFunct應該是一個獲得QVariant並返回MyClassMyClass2實例的MyClass2 ,它是否正確? 如果你的答案是肯定的,那么這個函數應該得到一個QVariant類型的參數,你的函數沒有參數,所以結果是:

template<class T>
QList<T> QVariantToQList(QVariant & qv,T (*convFunct)(QVariant const&) )
{
    // Create the list that will hold the return values
    QList<T> qListOfMembers;
    if(qv.typeName() == "QVariantMap"){
        foreach(QVariant const& mapMember,qv.toMap())
        {
            qListOfMembers.append(convFunct(mapMember));
        }
    }
    else if (qv.typeName() == "QVariantList"){
        foreach(QVariant const& listMember,qv.toList())
        {
            qListOfMembers.append(convFunct(listMember));
        }
    }
    else
    {
        qDebug()<< "QVariantToQList currently is implemented only for QMap and QList types";
        throw ;
    }
    return qListOfMembers;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM