gpt4 book ai didi

c++ - 无法在 std::thread 中传递一维数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:40 26 4
gpt4 key购买 nike

这是我的实际项目,但我做了一个最小的例子(代码基于 Lightness Races in Orbit 的例子)。

#include <thread>
#include <iostream>

class Foo
{
Foo(int n = 10)
{
size_t a[n];
constexpr int p = 5;
std::thread threads[p];
for (int i = 0; i < p; ++i)
threads[i] = std::thread(std::bind(&Foo::bar, this, a, n));

for (auto& th : threads) th.join();
}

void bar(size_t* a, int n) {}
};

int main() {std::cout << "ok\n";}

Live On Coliru

错误是因为我使用的数组的大小为 n。然而,在实际项目中,我很难改变它,因为许多代码行都是基于它的。

最佳答案

使用 vector

或者通过类型推导发生之前将数组衰减为指针来解决问题:

std::bind(&Foo::bar, this, +a, n)

问题是,bind 推导出一个数组引用,然后尝试/按值/复制它。语言未指定数组拷贝。

关于c++ - 无法在 std::thread 中传递一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27952383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com