Я хотел бы написать функцию, которая принимает целое число и порождает потоки, которые используют это целое число. Целое число может быть вычислено. Это не должно быть буквальным. Если я использую конкретный тип, такой как usize
, он будет работать, но когда я пытаюсь его обобщить, он не может скомпилировать :
fn g<A>(a: A)
where
A: num::PrimInt + Copy + std::fmt::Debug + Send,
{
let hs = (0..3).map(|_| {
std::thread::spawn(move || {
println!("{:?}", a);
})
});
for h in hs {
h.join().unwrap();
}
}
Ошибка:
1 | fn g<A>(a: A)
| - help: consider adding an explicit lifetime bound `A: 'static`...
...
6 | std::thread::spawn(move || {
| ^^^^^^^^^^^^^^^^^^
|
note: ...so that the type `[closure@src/main.rs:6:28: 8:10 a:A]` will meet its required lifetime bounds
--> src/main.rs:6:9
|
6 | std::thread::spawn(move || {
| ^^^^^^^^^^^^^^^^^^
Так как у меня есть черта Copy
, она должна быть в состоянии скопировать это значение для каждого потока, и, следовательно, рекомендации по ограничению времени жизни не нужны. Как мне решить эту проблему?