C++ c++;用于将QVariant转换为{自定义类型}的函数指针
QVariant包含一个要转换为自定义类型MyClass或MyClass2的QMap对象 例如:C++ c++;用于将QVariant转换为{自定义类型}的函数指针,c++,qt,templates,C++,Qt,Templates,QVariant包含一个要转换为自定义类型MyClass或MyClass2的QMap对象 例如: class MyClass{ int item1; int item2; QString string1; AnotherClass subclass; }; class MyClass2{ int item1; QString string1; AnotherClass subclass; }; 已编写函数将QVariant转换为相关类 MyClass
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;
}
模板
QList qvariantqlist(QVariant&qv,T(*convFunct)()
{
//创建包含返回值的列表
QList qListOfMembers;
if(qv.typeName()=“QVariantMap”){
foreach(QVariant常量和映射成员,qv.toMap())
{
追加(mapMember.convFunct());
}
}
else if(qv.typeName()=“QVariantList”){
foreach(QVariant const&listMember,qv.toList())
{
追加(listMember.convFunct());
}
}
其他的
{
qDebug()如果我正确理解了您的问题,convFunct
应该是一个函数,它获取QVariant
并返回MyClass
或MyClass2
的实例,是否正确?如果您的答案是肯定的,那么这个函数应该获取类型为QVariant
的参数,而您的函数没有获取参数,因此t他的结果是:
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;
}
模板
QList qvariantqlist(QVariant&qv,T(*convFunct)(QVariant const&)
{
//创建包含返回值的列表
QList qListOfMembers;
if(qv.typeName()=“QVariantMap”){
foreach(QVariant常量和映射成员,qv.toMap())
{
追加(convFunct(mapMember));
}
}
else if(qv.typeName()=“QVariantList”){
foreach(QVariant const&listMember,qv.toList())
{
追加(convFunct(listMember));
}
}
其他的
{
qDebug()您正确地解释了问题。我做了建议的更改,但编译器继续抱怨“错误:'const class QVariant'没有名为'convFunct'@DarwinIcesurfer”的成员。您是复制代码还是转换您的函数原型,查看我的代码中使用的函数的位置,并让我知道结果。我试图就地修改我的代码a比剪切粘贴更有效。当我剪切粘贴你的代码时,效果很好。谢谢,回答被接受,评论+1。