如何以静态方式使用另一个 constexpr 数组初始化一个数组
How to initialise one array using another constexpr array in a static manner
我有一个这样的constexpr
数组:
constexpr std::array<int, 4> BASES_TO_CHECK = { 8, 16, 32, 64 };
我想做一些类似于:
std::array<std::thread, BASES_TO_CHECK.size()> calc;
for(size_t i = 0; i<BASES_TO_CHECK.size(); ++i)
{
calc[i]=std::thread(calculate<BASES_TO_CHECK[i]>, std::ref(recordMap[BASES_TO_CHECK[i]]), std::ref(counterMap.at(BASES_TO_CHECK[i])), std::ref(done));
}
但是,由于该变量用作模板参数,因此将不起作用。我最终这样做了:
std::array<std::thread, BASES_TO_CHECK.size()> calc = {
std::thread(calculate<BASES_TO_CHECK[0]>, std::ref(recordMap[BASES_TO_CHECK[0]]), std::ref(counterMap.at(BASES_TO_CHECK[0])), std::ref(done)),
std::thread(calculate<BASES_TO_CHECK[1]>, std::ref(recordMap[BASES_TO_CHECK[1]]), std::ref(counterMap.at(BASES_TO_CHECK[1])), std::ref(done)),
std::thread(calculate<BASES_TO_CHECK[2]>, std::ref(recordMap[BASES_TO_CHECK[2]]), std::ref(counterMap.at(BASES_TO_CHECK[2])), std::ref(done)),
std::thread(calculate<BASES_TO_CHECK[3]>, std::ref(recordMap[BASES_TO_CHECK[3]]), std::ref(counterMap.at(BASES_TO_CHECK[3])), std::ref(done))
};
这有效,但依赖于我不更改BASES_TO_CHECK
中的元素数量,而无需手动更新初始化数组的代码部分calc
。
template<std::size_t... i>
std::array<std::thread, BASES_TO_CHECK.size()> gen_impl(std::index_sequence<i...>) {
return {
std::thread(calculate<BASES_TO_CHECK[i]>,
std::ref(recordMap[BASES_TO_CHECK[i]]),
std::ref(counterMap.at(BASES_TO_CHECK[i])),
std::ref(done)
)...
};
}
auto calc = gen_impl(std::make_index_sequence<BASES_TO_CHECK.size()>{});
相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理