访问模板静态函数

Accessing template static function

使用 Rust,我正在尝试访问泛型的静态函数。

#![allow(unused)]

struct Bar;
impl Bar{
    fn foo(){}
}

struct Qux;
impl Qux{
    fn run<T>() {
        T::foo();
    }
}

fn main() {
    Qux::run::<Bar>();
}

然而这不起作用,因为:

 T::foo();
   |            ^^^ function or associated item not found in `T`

执行此操作的惯用方法是什么? 我设置了一个 playground 来简化调试。

它不是模板,它是通用函数。如果您不知道该对象是否具有该方法,则不能对该对象使用该方法。 Rust 在编译时检查所有这些。 生锈的方法是创建一个 traitconstrain 类型 trait:

#![allow(unused)]

trait Foo {
    fn foo() {}
}

struct Bar;
impl Foo for Bar {}

struct Qux;
impl Qux {
    fn run<T: Foo>() {
        T::foo();
    }
}

fn main() {
    Qux::run::<Bar>();
}

Playground