Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;用于将QVariant转换为{自定义类型}的函数指针_C++_Qt_Templates - Fatal编程技术网

C++ c++;用于将QVariant转换为{自定义类型}的函数指针

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

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);
我的问题是,在模板函数中,传递函数指针的正确方式是什么?下面显示的代码返回一个错误“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。