问题
在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。
但是这个方式在处理线程时会碰到一个问题。
考虑下面一个简单的场景:
class demoC
{
public:std::thread t;int x;void threadFunc(){std::cout<<x<<std::endl;}demoC(){t = std::thread(threadFunc);}
};int main() {demoC demo;
}
一个类中有一个线程对象,并编写一个对应线程函数,在初始化时启动这个线程。
而且这个线程中是需要访问到类中的其他成员变量的。
这是面向对象语言的一个搭建类的基本方法。
但是上面的代码是无法编译通过的:
也就是说作为线程函数是需要为一个static方法的。
但是如果把类中的这个方法threadFunc方法定义成static方法的话,就无法直接访问到类的成员变量