C++ 你能初始化一个类中引用该类中函数的线程吗?

C++ 你能初始化一个类中引用该类中函数的线程吗?,c++,multithreading,C++,Multithreading,我有以下代码,它不是使用 clang++ -std=c++11 -pthread threaded_class.cpp -o test 及 这样初始化线程合法吗?因为函数是非静态的,所以线程没有类实例来调用该方法。为此,您可以创建一个静态函数,将调用转发到init: class Threaded_Class { public: Threaded_Class(); void init(); static void static_init(Threaded_Class *

我有以下代码,它不是使用

clang++ -std=c++11 -pthread threaded_class.cpp -o test


这样初始化线程合法吗?

因为函数是非静态的,所以线程没有类实例来调用该方法。为此,您可以创建一个静态函数,将调用转发到init:

class Threaded_Class {
public:
    Threaded_Class();
    void init();
    static void static_init(Threaded_Class * instance)
    {
        instance->init();
    }

};

Threaded_Class::Threaded_Class() {
    std::thread t1(static_init,this);//new line
    t1.join();
}

因为函数是非静态的,所以线程没有类实例来调用该方法。为此,您可以创建一个静态函数,将调用转发到init:

class Threaded_Class {
public:
    Threaded_Class();
    void init();
    static void static_init(Threaded_Class * instance)
    {
        instance->init();
    }

};

Threaded_Class::Threaded_Class() {
    std::thread t1(static_init,this);//new line
    t1.join();
}

另一种方法是使用std::bind

#include <functional>

# instead of std::thread t1(init);
std::thread t1(std::bind(&Threaded_Class::init,this));
#包括
#而不是std::线程t1(init);
std::threadt1(std::bind(&Threaded_Class::init,this));

这提供了类实例。

另一种方法是使用std::bind

#include <functional>

# instead of std::thread t1(init);
std::thread t1(std::bind(&Threaded_Class::init,this));
#包括
#而不是std::线程t1(init);
std::threadt1(std::bind(&Threaded_Class::init,this));

这提供了类实例。

您可能需要更多
std::thread t1(&Threaded\u class::init,This)可能的副本您可能需要更多
std::threadt1(&Threaded_Class::init,this)的可能副本,或者您可以使用lambda函数代替静态函数。或者您可以使用lambda函数代替静态函数。