将成员函数传递给QtConcurrent run()

pass member function to QtConcurrent run()

本文关键字:QtConcurrent run 成员 函数      更新时间:2023-10-16

我试图传递一个成员函数给QtConcurrent::run()

我已经试过这样做了:

GDALDriver *poNITFDriver;
future = QtConcurrent::run(poNITFDriver,&GDALDriver::CreateCopy, pszDstFilename, poDataset, FALSE,  papszOptions, pfnProgress, NULL);

但是我得到了一系列关于没有匹配函数调用的错误。

这是最初的调用:

poNITFDriver->CreateCopy(pszDstFilename, poDataset, FALSE, papszOptions, pfnProgress, NULL);

我做错了什么?run()能接受这么多参数吗?

这是我得到的错误:

error: no matching function for call to run(GDALDriver*&, GDALDataset* (GDALDriver::*)(const char*, GDALDataset*, int, char**, int (*)(double, const char*, void*), void*), const char**, GDALDataset**, bool, char***, int (**)(double, const char*, void*), NULL)

谢谢

必须将对象的指针作为第一个参数传递,将方法的地址作为第二个参数传递(然后在其后输入任何其他参数)。

看一下这个文档。看看这些章节:

  • 使用成员函数
  • 使用Lambda函数

具体来说,您可以使用boost::bind()std::tr1::bind()在调用函数时绑定多个参数。这样做有很多原因:

  • 调用超过5个参数的函数。
  • 简化使用常量参数调用函数。
  • 改变参数的顺序。

我认为你传递了超过5个参数。