Rust 如何将方法传递给需要静态生存期参数的函数?
考虑到函数需要一个具有静态生存期的“处理程序”,如何将方法传递给函数 (这背后的确切用例是在结构中创建链) 考虑到我们有以下结构Rust 如何将方法传递给需要静态生存期参数的函数?,rust,lifetime,Rust,Lifetime,考虑到函数需要一个具有静态生存期的“处理程序”,如何将方法传递给函数 (这背后的确切用例是在结构中创建链) 考虑到我们有以下结构链: struct Chain { f: Box<dyn Fn()> } impl Chain { fn new(handler: impl Fn() + 'static) -> Self { return Chain { f: Box::new(handler) }; } fn invoke
链
:
struct Chain
{
f: Box<dyn Fn()>
}
impl Chain
{
fn new(handler: impl Fn() + 'static) -> Self
{
return Chain { f: Box::new(handler) };
}
fn invoke(&self)
{
(self.f)();
}
}
…编译器出现以下错误:
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
我曾经尝试过声明MyStruct
及其成员为静态的想法,但是能够创建结构的多个独立实例是一项要求(参见Iron web服务器的多个实例)
这里有一个。在您的结束语中:
let closure = || {
println!("Closure called");
self.printer_method(String::from("printer_method")); // <-- here
};
在结束语中:
let closure = || {
println!("Closure called");
self.printer_method(String::from("printer_method")); // <-- here
};
这是一个很好的建议,也是一个简单的解释!在我关于Iron的特定用例中(链API属于Iron),我想我可能没有解决方案了……这是一个很好的建议,也是一个简单的解释!在我使用Iron的特定用例中(链API属于Iron),我想我可能会被困在没有解决方案的情况下。。。
struct Chain<'a>
{
f: Box<dyn Fn() +'a>
}
impl<'a> Chain<'a>
{
fn new(handler: impl Fn() + 'a) -> Self
{
return Chain { f: Box::new(handler) };
}
fn invoke(&self)
{
(self.f)();
}
}