[英]c++ function pointer used to convert a QVariant to {a custom type
QVariant持有一個QMap對象,該對象將被轉換為自定義類型MyClass或MyClass2。
例:
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);
我的問題是,在模板函數中傳遞函數指針的正確方法是什么? 下面顯示的代碼返回錯誤'const class QVariant沒有名為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;
}
這是前一個問題的后續問題 。該問題與此問題之間的區別在於T是'MyClass'或'MyClass2'而不是通常由QVariant持有的類型。
如果我正確理解你的問題, convFunct
應該是一個獲得QVariant
並返回MyClass
或MyClass2
實例的MyClass2
,它是否正確? 如果你的答案是肯定的,那么這個函數應該得到一個QVariant
類型的參數,你的函數沒有參數,所以結果是:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.