QT Qt并发运行与重载类函数

QT QtConcurrent run with overloaded class function

本文关键字:重载 类函数 运行 Qt 并发 QT      更新时间:2023-10-16

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

  1. 将文件路径作为字符串和压缩格式
  2. 采用文件路径和压缩格式的矢量

问题是我在QtCurrent不知道要使用哪个重载函数时遇到问题。我阅读了这个堆栈溢出,它显示了使用 static_cast 明确说明使用哪种方法。不过,我遇到了语法问题,因为我的函数是类函数而不是静态方法。考虑到这些不是静态方法,我什至可以使用static_cast吗?

我如何调用运行:

CompressFile compressor(&m_sysLog); 
QVector<QString> files;     
CompressFormat format((CompressFormat)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);
...
}

如果我删除它编译的压缩函数之一,所以我知道我已经将问题缩小到了这一点。

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

根据注释,您可以使用static_cast来消除各种重载之间的歧义......

QtConcurrent::run(&compressor,
static_cast<bool(CompressFile::*)(QVector<QString>, CompressFormat)>(&CompressFile::compress),
files,
format);