【发布时间】:2022-01-20 10:34:44
【问题描述】:
我正在尝试创建一个结构,其中包含一个项目数组,每个项目都有一个关联的名称和值。我在这里使用结构而不是数组,因为一旦我让这部分工作,我可能想向结构添加额外的字段。
我想出了以下内容:
pub trait Named {
fn name(&self) -> &str;
}
pub trait Valued<T> {
fn value(&self) -> &T;
}
pub struct ValuedEnum<T, D, const N: usize>
where
T: Named + Valued<D>,
{
options: [T; N],
}
编译时会生成此错误消息:
error[E0392]: parameter `D` is never used
--> src\inputs\definition\macros.rs:68:26
|
68 | pub struct ValuedEnum<T, D, const N: usize>
| ^ unused parameter
|
= help: consider removing `D`, referring to it in a field, or using a marker such as `PhantomData`
= help: if you intended `D` to be a const parameter, use `const D: usize` instead
所以我尝试删除 D:
pub trait Named {
fn name(&self) -> &str;
}
pub trait Valued<T> {
fn value(&self) -> &T;
}
pub struct ValuedEnum<T, const N: usize>
where
T: Named + Valued<D>,
{
options: [T; N],
}
但后来我得到了这个错误:
error[E0412]: cannot find type `D` in this scope
--> src\inputs\definition\macros.rs:70:23
|
68 | pub struct ValuedEnum<T, const N: usize>
| - similarly named type parameter `T` defined here
69 | where
70 | T: Named + Valued<D>,
| ^
|
help: a type parameter with a similar name exists
|
70 | T: Named + Valued<T>,
| ~
help: you might be missing a type parameter
|
68 | pub struct ValuedEnum<T, const N: usize, D>
| +++
这似乎让我陷入了困境。
有没有正确的方法来指定这个?
【问题讨论】:
-
大部分是的。但是下面的@jmb 提到我应该完全避免对结构设置界限