gpt4 book ai didi

rust - 如何在 Rust 中创建一个引用 trait 实现的静态数组?

转载 作者:行者123 更新时间:2023-11-29 08:26:20 25 4
gpt4 key购买 nike

<分区>

我希望能够遍历一组解析器,尝试从主解析函数中找到委托(delegate)解析器。解析器列表在编译时已知,因此我希望它是一个常量。

我已经尝试了一些这样的方法,但我无法让它工作:

const ALL_PARSERS: [&Parser; 1] = [&CommentParser {}];

我怎样才能做到这一点?

注意事项:

  • Parser 是一个特征。
  • CommentParser 是一个实现Parser 的结构体。
  • 还有 Parser 的其他实现,但为简单起见未显示。
  • 尽管所有解析器实现在编译时都是已知的,但我只是想避免显式地逐一尝试,因为这会使代码比我认为的更糟糕。

我目前得到的错误:

|
11 | const ALL_PARSERS: [&Parser; 1] = [&CommentParser {}];
| ^^^^^^^^^^^^ the trait `parsers::Parser` cannot be made into an object
|
= note: method `parse` has generic type parameters

我在解析方法中看不到任何泛型:

pub trait Parser {
fn opening_char(self: &Self) -> char;
fn parse(&mut self, env: impl ParserEnv) -> ParseResult;
}

如果我创建类型值:

const ALL_PARSERS: [Parser; 1] = [CommentParser {}];

错误变为:

11 | const ALL_PARSERS: [Parser; 1] = [CommentParser {}];
| ^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `(dyn parsers::Parser + 'static)`

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com