请问C++11的多线程如何在类的成员函数里调用另一个成员函数在新线程里执行

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的相关函数,差不多就这样。