Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ QT QT使用重载类函数并发运行_C++_Qt_Overloading - Fatal编程技术网

C++ QT QT使用重载类函数并发运行

C++ QT QT使用重载类函数并发运行,c++,qt,overloading,C++,Qt,Overloading,我有一个用来将文件压缩成不同格式的类。我正在尝试使用QtConcurrent在后台运行压缩。我有两个功能: 将文件路径作为字符串和压缩格式 获取文件路径和压缩格式的向量 问题是,我不知道该使用哪个重载函数,所以我遇到了问题。我读了一篇文章,其中显示了使用static_cast显式声明要使用的方法。不过,由于我的函数是类函数,而不是静态方法,所以我一直在使用语法。考虑到这些都不是静态方法,我甚至可以使用静态方法吗 我如何称呼跑步: CompressFile compressor(&m_sy

我有一个用来将文件压缩成不同格式的类。我正在尝试使用QtConcurrent在后台运行压缩。我有两个功能:

  • 将文件路径作为字符串和压缩格式
  • 获取文件路径和压缩格式的向量
  • 问题是,我不知道该使用哪个重载函数,所以我遇到了问题。我读了一篇文章,其中显示了使用static_cast显式声明要使用的方法。不过,由于我的函数是类函数,而不是静态方法,所以我一直在使用语法。考虑到这些都不是静态方法,我甚至可以使用静态方法吗

    我如何称呼跑步:

    CompressFile compressor(&m_sysLog); 
    QVector<QString> files;     
    CompressFormat format((CompressFormat)pMsgCast->get_format()); 
    QtConcurrent::run(&compressor, &CompressFile::compress, files, format);
    
    压缩文件压缩程序(&m_sysLog); 矢量文件; 压缩格式格式((压缩格式)pMsgCast->get_format()); QtConcurrent::run(&compressor,&CompressFile::compress,files,format); 压缩类标题

    class CompressFile : public QObject
    {
        Q_OBJECT
    public:
    
    ...
    
    bool compress(QString strFileName, CompressFormat format);            
    bool compress(QVector<QString> strFileList, CompressFormat format);
    
    ...
    }
    
    类压缩文件:公共QObject
    {
    Q_对象
    公众:
    ...
    bool compress(QString strFileName,CompressFormat格式);
    bool compress(QVector strFileList,CompressFormat格式);
    ...
    }
    
    如果我删除了它编译的一个压缩函数,那么我知道我已经将问题缩小到了这一点

    FileCompressor.cpp:100:74:注意:类型“T(Class::)(Param1、Param2、Param3、Param4、Param5)const”和“bool(CompressFile::)(QString、CompressFormat)”具有不兼容的cv限定符 FileCompressor.cpp:100:74:注意:无法从重载函数“&CompressFile::compress”解析地址


    根据注释,您可以使用
    静态\u cast
    来消除各种重载之间的歧义

    QtConcurrent::run(&compressor,
                      static_cast<bool(CompressFile::*)(QVector<QString>, CompressFormat)>(&CompressFile::compress),
                      files,
                      format);
    
    QtConcurrent::运行(&compressor),
    静态强制转换(&CompressFile::compress),
    文件夹,
    格式);
    
    您应该能够使用
    静态\u cast
    。试试
    QtConcurrent::run(&compressor,static_cast(&CompressFile::compress),files,format)
    。效果不错!我的语法太离谱了,谢谢。如果你把它作为一个帖子,我会把它标记为答案。