Rust 在泛型类型参数上调用trait方法

Rust 在泛型类型参数上调用trait方法,rust,traits,Rust,Traits,假设我有一个rust特性,其中包含一个不接受&self参数的函数。是否有一种方法可以基于实现该特性的具体类型的泛型类型参数来调用该函数?例如,在下面的get_type_id函数中,如何成功调用CustomType trait的type_id()函数 pub trait TypeTrait { fn type_id() -> u16; } pub struct CustomType { // fields... } impl TypeTrait for CustomTyp

假设我有一个rust特性,其中包含一个不接受&self参数的函数。是否有一种方法可以基于实现该特性的具体类型的泛型类型参数来调用该函数?例如,在下面的get_type_id函数中,如何成功调用CustomType trait的type_id()函数

pub trait TypeTrait {
    fn type_id() -> u16;
}

pub struct CustomType {
    // fields...
}

impl TypeTrait for CustomType {
    fn type_id() -> u16 { 0 }
}

pub fn get_type_id<T : TypeTrait>() {
    // how?
}
pub-trait-TypeTrait{
fn type_id()->u16;
}
发布结构自定义类型{
//字段。。。
}
CustomType的impl-TypeTrait{
fn type_id()->u16{0}
}
pub fn get_type_id(){
//怎么做?
}

谢谢

不幸的是,这在目前是不可能的。它过去是基于实现细节的,但是为了最终实现一种正确的方法,它被删除了

当它最终实现时,它可能最终看起来像这样:
TypeTrait:::type_id()
,但目前还没有固定的语法

这是一个已知的案例,也是一个完全打算得到支持的案例,不幸的是,目前还不可能实现


关于这个主题(称为关联方法)的完整讨论在这里:这里:

正如Aatch所提到的,这目前是不可能的。解决方法是使用伪参数指定
Self
的类型:

pub trait TypeTrait {
    fn type_id(_: Option<Self>) -> u16;
}

pub struct CustomType {
    // fields...
}

impl TypeTrait for CustomType {
    fn type_id(_: Option<CustomType>) -> u16 { 0 }
}

pub fn get_type_id<T : TypeTrait>() {
    let type_id = TypeTrait::type_id(None::<T>);
}
pub-trait-TypeTrait{
fn类型\u id(\u:选项)->u16;
}
发布结构自定义类型{
//字段。。。
}
CustomType的impl-TypeTrait{
fn type_id(u:Option)->u16{0}
}
pub fn get_type_id(){
让type_id=TypeTrait::type_id(无:);
}

鉴于此处概述的特定用例,您可能有兴趣查看。感谢您提供的信息,希望有一天能在Rust中看到这一点。然而,答案是那个提供了一个简单解决方案的人!很好的解决方法,我自己没有想到这一点。现在将使用这个,直到生锈的支持得到改善!对于未来的读者:这个答案现在已经过时了,因为与功能相关的方法已经在Rust中实现了很多年。在Rust的现代版本中,
get_type_id
可以通过
T::type_id()
实现,而不需要对问题中的代码进行其他更改。