我正在为下面的类
A
编写构造函数。 mutex_array
调用默认的 std::mutex
构造函数,这很好。然后,我想从成员初始值设定项列表中 unique_lock_array
的每个元素构造 std::mutex
的每个元素。也就是说, unique_lock_array[i]
应该是构造函数主体之前 mutex_array[i]
的唯一锁。这可能吗?
#include <array>
#include <mutex>
class A {
public:
A() : unique_lock_array(/* ??? */) {}
private:
std::array<std::mutex, 10> mutex_array;
std::array<std::unique_lock<std::mutex>, 10> unique_lock_array;
};
您需要一个辅助函数,但现在使用立即执行的 lambda 表达式很容易做到。那会给你
class A {
public:
A() : unique_lock_array([&]<std::size_t... Is>(std::index_sequence<Is...>)
{
return std::array{std::unique_lock{mutex_array[Is]}...};
}(std::make_index_sequence<10>{})) {}
private:
std::array<std::mutex, 10> mutex_array;
std::array<std::unique_lock<std::mutex>, 10> unique_lock_array;
};