2012-10-26 42 views
1

我不知道如何創建一個函數指針指向處理QVariant的Qt庫中的方法。我在我的代碼中有很多地方將QVariantList轉換爲QList,其中SomeType可以是QString,int,QMap或其他可以保存在QVariant對象中的變量。在我打算使用該方法的時候,類型是已知的。QVariant.toXXX函數的函數指針

我可以使用模板編寫一個方法嗎?下面是該方法的僞代碼我想寫

template <class T> 
QList<T> QVariantListToQList(QVariantList qvList, (* QVariant::toXXX()) convert) 
{ 
    QList<T> qlistOfMembers; 
    foreach(T listMember, qvList) 
    { 
     qlist.OfMember.append(listMmeber.convert()); 
    } 
    return qlistOfMembers; 
} 

的鏈接到這個討論的文檔,或使用正確的語法的方法,將不勝感激。

回答

3

你不需要那樣做。使用qvariant_castQVariant::value函數,並完全刪除該參數。

喜歡的東西:

template <class T> 
QList<T> QVariantListToQList(QVariantList const& qvList) 
{ 
    QList<T> qlistOfMembers; 
    foreach(QVariant const& listMember, qvList) 
    { 
     qlistOfMembers.append(listMember.value<T>()); 
    } 
    return qlistOfMembers; 
} 

如果你想要做你的方式,語法變得有些複雜:

#include <QtCore> 

template <class T> 
QList<T> QVariantListToQList(QVariantList const& qvList, 
          T (QVariant::*convert)() const) 
{ 
    QList<T> qlistOfMembers; 
    foreach(QVariant const& listMember, qvList) 
    { 
     qlistOfMembers.append((listMember.*convert)()); 
    } 
    return qlistOfMembers; 
} 

int main(void) 
{ 
    QVariantList vl; 
    vl.append(QVariant(QString("hello"))); 
    qDebug() << vl; 
    QList<QString> sl = QVariantListToQList<QString>(vl, &QVariant::toString); 
    qDebug() << sl; 
} 
+0

第一個功能是正是我需要的。第二個功能正是我所要求的。謝謝 – DarwinIcesurfer

+0

後續問題已發佈。 [so link](http://stackoverflow.com/questions/13096292/c-function-pointer-used-to-convert-a-qvariant-to-a-custom-type)。 (如果QVariant是一個QVariantMap,並且我有一個將QVariantMap轉換爲MyClass的轉換函數,我可以傳遞一個函數指針來完成這項工作嗎?) – DarwinIcesurfer