4 ms·
Something like this isn’t possible fn foo(f: impl for<T: ToString> Fn(T)) { f(“Hello World”); f(3.14); } fn main() { f(|x|
by armchairhacker 9mo ago
Something like this isn’t possible
fn foo(f: impl for<T: ToString> Fn(T)) {
f(“Hello World”);
f(3.14);
}
fn main() {
f(|x| println!("{}", x.to_string());
}
The workaround:
trait FnToString {
fn call(&self, x: impl ToString);
}
fn foo(f: impl FnToString) {
f.call("Hello World");
f.call(3.14);
}
struct AnFnToString;
impl FnToString for AnFnToString {
fn call(&self, x: impl ToString) {
println!("{}", x.to_string());
}
}
fn main() {
foo(AnFnToString);
}
- tuetuopay 9mo agoHa, yes, I see what you mean now. That's not really the closure's fault but monomorphization of the foo function. The specific thing you want to do would require boxing the value, or do more involved typing.