如何通过子成员函数创建线程

How to create a thread by a child member function

我有一个IBaseclass和一个Childclass。我需要在不同的子 class 中调用不同的 proc 函数。我不确定下面哪个表格是正确的,也许两者都不是 XD。

class IBase
{
public:
    virtual void proc() = 0;

    auto createBind()
    {
        return bind(&IBase::proc, this);
    }
};
class Child :public IBase
{
public:
    void proc() override
    {
        cout << "Hello World" << endl;
    }
};
int main()
{
    IBase* pointer = new Child;

        //form 1
    thread th(pointer->createBind());
    th.join();

        //form 2
    thread th2(&IBase::proc, pointer);
    th2.join();

    cout << "Finish" << endl;
    return 0;
}

请问各位在实际项目中是如何解决这种情况的

我会使用表格 3 :-) :

thread* th3 = pointer->start();
th3->join();

startIBase 中:

thread* start()
{
    thread* t = new thread(createBind());

    return t;
}

在我看来,这会隐藏更多实施细节并为调用者提供他期望的 API(启动线程)。

最惯用和最健壮的方式可能是这个

std::thread t([=]{pointer->proc();});

没有绑定,没有无关的辅助成员函数,没有奇怪的语法和多余的 class 名称。