具有通用特征的结构,这也是通用特征

Ror*_*ory 3 traits rust

在 Rust 1.15 中,我创建了一个特征来抽象读取和解析文件格式。我正在尝试创建一个内部具有此通用特征的结构。

我有这个特点:

use std::io::Read;

trait MyReader<R: Read> {
    fn new(R) -> Self;
    fn into_inner(self) -> R;

    fn get_next(&mut self) -> Option<u32>;
    fn do_thingie(&mut self);
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个结构,它引用了实现这个的东西。

struct MyIterThing<'a, T: MyReader<R>+'a> {
    inner: &'a mut T,
}
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

use std::io::Read;

trait MyReader<R: Read> {
    fn new(R) -> Self;
    fn into_inner(self) -> R;

    fn get_next(&mut self) -> Option<u32>;
    fn do_thingie(&mut self);
}
Run Code Online (Sandbox Code Playgroud)

T: MyReader+'a, 我收到错误: "error[E0243]: wrong number of type arguments: expected 1, found 0",T: MyReader<R: Read>+'a给出了一个低级别的语法错误,它不希望:出现。

这也不起作用:

struct MyIterThing<'a, T: MyReader<R>+'a> {
    inner: &'a mut T,
}
Run Code Online (Sandbox Code Playgroud)

如何创建我的MyIterThing结构?

She*_*ter 5

你可能不想要一个类型参数,你想要一个关联的类型

use std::io::Read;

trait MyReader {
    type R: Read;

    fn new(Self::R) -> Self;
    fn into_inner(self) -> Self::R;

    fn get_next(&mut self) -> Option<u32>;
    fn do_thingie(&mut self);
}

struct MyIterThing<'a, T>
    where T: MyReader + 'a
{
    inner: &'a mut T,
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 谢谢 - 那里有一些有见地的链接。 (2认同)