0

QVariantは、カスタムタイプMyClassまたはMyClass2に変換されるQMapオブジェクトを保持しています。

例:

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

私の質問は、テンプレート関数で関数ポインタを渡す適切な方法は何ですか?以下に示すコードはエラーを返します'constclassQVariantには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;
}

これは前の質問のフォローアップ質問 です。この質問とこの質問の違いは、QVariantが通常保持するタイプではなく、Tが「MyClass」または「MyClass2」であるということです。

4

1 に答える 1

2

あなたの質問を正しく理解していれば、またはのインスタンスを取得して返すconvFunct関数であるはずですが、それは正しいですか?答えが「はい」の場合、この関数はタイプのパラメーターを取得し、関数はパラメーターを取得しないため、結果は次のようになります。QVariantMyClassMyClass2QVariant

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;
}
于 2012-10-27T01:21:19.117 に答える