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」であるということです。