Рассмотрим следующий минимальный пример:
fn foo<T>(arg: T, f: impl FnOnce(i32) -> i32) -> Vec<T> {
let mut x: Vec<T> = Vec::new();
x.push(arg);
println!("{:?}", f(5));
x
}
fn main() {
println!("{:?}", foo::<u32>(5, |i_arg| { i_arg + 5 }));
}
который не компилируется, потому что используется impl Trait
:
error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
--> src/main.rs:10:28
|
10 | println!("{:?}", foo::<u32>(5, |i_arg| { i_arg + 5 }));
| ^^^ explicit generic argument not allowed
error: aborting due to previous error
error: could not compile `generic_functions`.
Есть ли у меня возможность указать тип для T
несмотря на использование impl Trait
в другом аргументе? Я работаю в кодовой базе, где мне нужно вызвать общую функцию c, которая использует impl Trait
, но мне нужно указать другие общие типы c.