void ClassA::Fun1()
{
std::thread t(&ClassA::Fun2);
// 测试过这种std::thread t(std::mem_fn(ClassA::Fun2),this);
// 也不行
t.join();
}
void ClassA::Fun2()
{
// do sth...
}
如下可以。
class ClassA{
public:
void Fun1()
{
std::thread t(&ClassA::Fun2, this);
t.join();
}
void Fun2()
{
// do sth...
std::cout << "in Fun2" << std::endl;
}
};
int main()
{
ClassA a;
a.Fun1();
return 1;
}
ClassA : public std::enable_shared_from_this
{
public:
void Fun1()
{
std::thread t(std::bind(&ClassA::Fun2), shared_from_this());
t.join();
}
void Fun2()
{
// do sth...
std::cout << "in Fun2" << std::endl;
}
};
int main()
{
std::shared_ptr ptr = std::make_shared();
ptr->Fun1();
return 1;
}
我不知道多线程是啥,但是用友元类就可以调用另外一个类里的成员函数。
你在一个类,假设是a,它的公有声明中写了friend class b,那么对象b就可以调用a的公有成员函数,但是还有另外的条件,就是参数方面,直接调用a的函数是无意义的,必须得有一个对象,所以你必须得设定好参数,比如b里面设定一个函数以一个a对象为参数,然后调用a的相关函数,差不多就这样。