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)();
    }
}