1

QVariantを処理するQtライブラリのメソッドへの関数ポインタを作成する方法がわかりません。コード内に、QVariantListをQListに変換する場所がいくつかあります。ここで、SomeTypeは、QString、int、QMap、またはQVariantオブジェクトに保持できるその他の変数になります。このメソッドを使用するときは、タイプがわかっています。

テンプレートを使用してメソッドを記述できますか?以下は私が書きたいメソッドの擬似コードです

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

これが説明されているドキュメントへのリンク、または正しい構文を使用する方法をいただければ幸いです。

4

1 に答える 1

3

あなたはそれをする必要はありません。qvariant_castまたは関数を使用QVariant::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;
}
于 2012-10-26T13:40:09.223 に答える