【问题标题】:Initializing a std::barrier with a class member function使用类成员函数初始化 std::barrier
【发布时间】:2021-06-13 02:18:20
【问题描述】:

如何用类成员函数初始化std::barrier

class CMyClass {
private:
    void func() {
    }

public:
    void start() {
    }
}

void CMyClass::start() {
    std::barrier<??> barrier(threads_count, &func()); // ??
}

【问题讨论】:

    标签: c++ multithreading c++20 barrier


    【解决方案1】:

    barrier 的完成函数必须可以用零参数调用,这意味着您不能只将指针传递给非静态成员函数(这样的函数仍然需要一个参数:类实例)。相反,您必须提供一个 lambda:

    std::barrier barrier(threads_count, [this]{ func(); });
    

    类模板实参推导 (CTAD) 会从 lambda 的类型中推导出类模板参数,因此您不必担心。

    【讨论】:

    • 谢谢,告诉我,如何将std::barrier 声明为类的成员? (如何使用指向std::barrier的指针)?
    • Error C2338 N4861 [thread.barrier.class]/5: is_nothrow_invocable_v&lt;CompletionFunction&amp;&gt; shall be true :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多