无法从impl <t:x =“”>调用fn <t:x =“”>,因为T不满足X

时间:2018-10-02 17:20:42

标签: rust traits

我有一个特征RawFd,该特征针对满足特殊要求的每种类型实现。

现在,我有一个函数可以接受实现RawFd的任何类型。而且我有一个特点,每个实现T的{​​{1}}都有一个实现。

但是,即使RawFd实现了T,我也无法从我的特征中调用函​​数:

RawFd

这是我的错误,我该如何解决。

(链接到playground

1 个答案:

答案 0 :(得分:2)

如果您希望将"f"与参考一起使用,则必须执行以下操作:

print_fd()

fn print_fd(p: &impl RawFd) {
    println!("{}", p.raw_fd());
}

或者您必须重视价值:

fn print_fd<T: RawFd>(p: &T) {
    println!("{}", p.raw_fd());
}

或者您可以使用克隆:

impl<T: RawFd> Printable for T {
    fn print(self) {
        print_fd(self);
    }
}