用成员初始值设定项列表中的另一个数组初始化一个数组

问题描述 投票:0回答:1

我正在为下面的类

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;
};
c++ arrays class constructor initializer-list
1个回答
1
投票

您需要一个辅助函数,但现在使用立即执行的 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;
};
© www.soinside.com 2019 - 2024. All rights reserved.