首页 > 解决方案 > 在 trait 实现中关联特定函数

问题描述

有没有办法声明一个将函数作为泛型参数并使用它的泛型特征?澄清(非功能代码):

pub trait Test<F, T> where F: Fn(i32) -> T {
    fn test(arg: i32) -> T {
        let func: F;
        func(arg)
    }
}

标签: functiongenericsrust

解决方案


您可以在实现特征时关联特定功能(直到现在才知道):

fn func() -> String {
    String::from("hello")
}

trait MyTrait {
    const FUNC: fn() -> String;
}

struct MyType;

impl MyTrait for MyType {
    const FUNC: fn() -> String = func;
}

fn main() {
    println!("{}", (MyType::FUNC)()); // prints hello
}

操场


推荐阅读