在 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结构?
你可能不想要一个类型参数,你想要一个关联的类型:
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)
也可以看看:
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |