Pointeur de fonction pour la fonction QVariant.toXXX

Je ne sais pas comment créer un pointeur de fonction sur une méthode de la bibliothèque Qt qui gère QVariant. J’ai plusieurs emplacements dans mon code où je convertis un QVariantList en un QList où SomeType peut être QSsortingng, int, QMap ou d’autres variables pouvant être conservées dans l’object QVariant. Au moment où je vais utiliser la méthode, le type est connu.

Puis-je écrire une méthode à l’aide de modèles? Ci-dessous le pseudo-code de la méthode que j’aimerais écrire.

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

Un lien vers la documentation où cela est discuté ou une méthode utilisant la syntaxe correcte serait apprécié.

Tu n’as pas besoin de faire ça. Utilisez qvariant_cast ou les fonctions QVariant::value et supprimez ce paramètre.

Quelque chose comme:

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

Si vous voulez le faire à votre façon, la syntaxe devient un peu compliquée:

 #include  template  QList QVariantListToQList(QVariantList const& qvList, T (QVariant::*convert)() const) { QList qlistOfMembers; foreach(QVariant const& listMember, qvList) { qlistOfMembers.append((listMember.*convert)()); } return qlistOfMembers; } int main(void) { QVariantList vl; vl.append(QVariant(QSsortingng("hello"))); qDebug() << vl; QList sl = QVariantListToQList(vl, &QVariant::toSsortingng); qDebug() << sl; }