从另一个类的函数调用std :: async时,如何传递另一个类的函数?

白云

我有两个课,CameraToBEVBEVTestCameraToBEV包含函数process()

class CameraToBEV : 
{
    public:
        CameraToBEV(std::vector<Point2f>, cv::Point2f, cv::Point2f);
        /*
            process(json Object, ROI Bounding box, Output Dimensions, Input Dimensions)
        */
        cv::Mat process(json&, std::vector<Point2f> = { Point2f(765,57), Point2f(1860,57), Point2f(27, 1000) ,Point2f(1800, 1000) }, Point2f=Point2f(1920,1080), Point2f=Point2f(1920, 1080));
};

BEVTest类包含在for循环中runtests()调用该函数的函数process()

void BEVTest::runTests()
{   
    CameraToBEV cbevObj(RoiBbox, OutputDim, InputDim);

    std::vector<std::future<cv::Mat>> processingThread;
    
        for (int i = 0; i < jsonObjects.size(); i++) {

            processingThread.emplace_back(std::async(std::launch::async, &CameraToBEV::process,this, jsonObjects[i]));
            
                
        }
    
}
 

我正在尝试使用进行多线程处理std::asyncfor loop以便对每个JSON对象并行执行处理功能。

但是,当我构建此代码时,出现以下错误;

Error   C2672   'std::async': no matching overloaded function found 
 
Error   C2893   Failed to specialize function template 'std::future<_Select_invoke_traits<decay<_Ty>::type,decay<_ArgTypes>::type...>::type> std::async(std::launch,_Fty &&,_ArgTypes &&...)' 

所以我尝试了另一种呼叫方式 std::async

processingThread.emplace_back(std::async(std::launch::async, &cbevObj.process,this, jsonObjects[i]));

processingThread.emplace_back(std::async(std::launch::async, &cbevObj.process,jsonObjects[i]));

processingThread.emplace_back(std::async(std::launch::async, &cbevObj.process,jsonObjects[i], ROIBbox, OutputDim, InputDim));

不过,我仍然遇到错误。

注意:

std::async如果我从具有for循环的同一个类的另一个函数中调用同一个类的函数,则可以没有任何错误或问题地进行调用,如本答案所述。只有当我从另一个具有for循环的类中调用另一个类的函数时,我才遇到错误。

编辑:尝试评论后

processingThread.emplace_back(std::async(std::launch::async, &CameraToBEV::process,&cbevObj, jsonObjects[i], RoiBbox, OutputDim, InputDim));

并且交替地不将默认值传递给process()

processingThread.emplace_back(std::async(std::launch::async, &CameraToBEV::process,&cbevObj, jsonObjects[i]));

错误是:

Error   C2672   'std::async': no matching overloaded function found 

Error   C2893   Failed to specialize function template 'std::future<_Select_invoke_traits<decay<_Ty>::type,decay<_ArgTypes>::type...>::type> std::async(std::launch,_Fty &&,_ArgTypes &&...)'   

Error   C2672 std::vector<std::future<cv::Mat>,std::allocator<std::future<cv::Mat>>>::emplace_back': no matching overloaded function found  

在BEVTests中声明jsonObjects:

class BEVTest
{
    Point2f InputDim, OutputDim;
    std::vector<Point2f> RoiBbox;
    std::string outputPath, inputJsonPath;
    std::vector<json> jsonObjects;

public:  
    BEVTest(std::string, std::string, std::vector<cv::Point2f>, cv::Point2f, cv::Point2f);
    void loadData(); 
    void runTests();
    json parseJson(std::string);
};
通用汽车

根据注释,如果要使用std :: async运行的成员函数是,CameraToBEV::process则紧随其后传递的参数&CameraToBEV::process应该是指向有效CameraToBEV实例的指针

另外,std::async默认情况下将按值传递参数。但是,您正在调用的函数具有签名...

cv::Mat process(json&, std::vector<Point2f> = { Point2f(765,57), Point2f(1860,57), Point2f(27, 1000) ,Point2f(1800, 1000) }, Point2f=Point2f(1920,1080), Point2f=Point2f(1920, 1080));

因此,它希望第一个参数是对json对象的非常量引用std::async因此致电(未试用)...

processingThread.emplace_back(std::async(std::launch::async, &CameraToBEV::process, &cbevObj, std::ref(jsonObjects[i])));

(注意使用std::ref

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP如何从另一个类调用函数?

来自分类Dev

如何从另一个类调用函数?

来自分类Dev

如何从另一个类调用函数

来自分类Dev

PHP - 从另一个类调用类函数

来自分类Dev

从另一个函数中调用类函数

来自分类Dev

如何从一个类调用另一个类的函数?

来自分类Dev

从另一个类迅速调用函数

来自分类Dev

Python-从另一个类调用函数

来自分类Dev

从Kivy中的另一个类调用函数

来自分类Dev

在Swift中从另一个类调用函数

来自分类Dev

从另一个类调用函数?安卓

来自分类Dev

Python-从另一个类调用函数

来自分类Dev

从另一个类调用函数?

来自分类Dev

从另一个函数存根类调用

来自分类Dev

PHP如何从另一个类和另一个文件调用函数?

来自分类Dev

是否可以在另一个类中调用一个类的构造函数?

来自分类Dev

从另一个类的一个类调用python函数

来自分类Dev

从另一个类中的一个类调用函数

来自分类Dev

如何在类中调用函数以在php中调用另一个类?

来自分类Dev

如何将一个类的函数作为另一个类的另一个函数的参数传递

来自分类Dev

Python从类中的另一个函数调用一个函数

来自分类Dev

如何从一个类函数调用变量到另一个类函数

来自分类Dev

使用构造函数将一个类传递给另一个类

来自分类Dev

PHP将一个类传递给另一个类构造函数

来自分类Dev

C ++从另一个类的主函数调用静态函数时遇到麻烦

来自分类Dev

如何在一个类中从另一个调用一个函数(方法)?

来自分类Dev

如何从jQuery中的另一个函数调用父类的函数

来自分类Dev

如何从另一个函数调用属于类成员的函数?

来自分类Dev

从另一个类调用一个函数

Related 相关文章

热门标签

归档