无法将类成员函数传递给另一个函数(std::thread::thread)

Posted

技术标签:

【中文标题】无法将类成员函数传递给另一个函数(std::thread::thread)【英文标题】:Cannot pass class member-function to another function(std::thread::thread) 【发布时间】:2013-09-18 18:38:15 【问题描述】:

看看这两个代码。

下面的代码可以正常工作。

void someFunction () 

    // Some unimportant stuff


MainM::MainM(QObject *parent) :
    QObject(parent)


    std::thread oUpdate (someFunction);


此代码抛出错误:

void MainM::someFunction ()       //as a class member





MainM::MainM(QObject *parent) :
    QObject(parent)


    std::thread oUpdate (someFunction);


错误:

error: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)'
     std::thread oUpdate (someFunction);
                                     ^

【问题讨论】:

Start thread with member function 的可能重复项 - 您是否尝试过搜索现有答案? @JonathanWakely 是的,对不起。它不仅与 std::thread 相关,所以... 【参考方案1】:

您不能通过将&amp; 应用于名称来创建指向成员函数的指针。您需要完全合格的成员:&amp;MainM::someFunction

并且还将它绑定到一个实例,通过传递this,例如

#include <thread>

struct MainM

    void someFunction() 
    

    void main() 
    
        std::thread th(&MainM::someFunction, this);
    
;

int main()

    MainM m;
    m.main();

【讨论】:

以上是关于无法将类成员函数传递给另一个函数(std::thread::thread)的主要内容,如果未能解决你的问题,请参考以下文章

试图将类作为参数传递给不同的类构造函数,但出现“转换”错误

将成员函数传递给函数指针

如何将带有 args 的成员函数作为参数传递给另一个成员函数?

是否可以直接将依赖于实例的成员函数(方法)从另一个成员函数传递给 STL 的算法?

将非静态成员函数作为参数传递给另一个类中的成员函数

将类函数传递给 PySpark RDD