创建类型的通用变体的枚举
我的结构具有常规参数 var
。该参数用于方法中,提高了运行时速度,因此可以进行大量比较,以编译时间。
在任何地方存储和传递通用类型是相当困难的。我有固定数量的变体,我可以在枚举 squirrelvariant
中列出,我可以更轻松地传递,并使用 match
分支到通用功能。
从 spirrel< var>
创建枚举非常困难,生锈似乎不允许编译时间匹配
或类似的东西。
struct Squirrel<const VAR: u8>
{
}
enum SquirrelVariant
{
V1(Squirrel<1>),
V2(Squirrel<2>),
V3(Squirrel<3>),
}
// failed attempt 1)
fn make_squirrel_variant<const VAR: u8>(s: Squirrel<VAR>) -> SquirrelVariant
{
match VAR {
1 => SquirrelVariant::V1(s), // expected `1_u8`, found `VAR`
2 => SquirrelVariant::V2(s), // expected `2_u8`, found `VAR`
3 => SquirrelVariant::V3(s), // expected `3_u8`, found `VAR`
}
}
// failed attempt 2)
impl From<Squirrel<1>> for SquirrelVariant
{
fn from(s: Squirrel<1>) -> Self
{
SquirrelVariant::V1(s)
}
}
impl From<Squirrel<2>> for SquirrelVariant
{
fn from(s: Squirrel<2>) -> Self
{
SquirrelVariant::V2(s)
}
}
impl From<Squirrel<3>> for SquirrelVariant
{
fn from(s: Squirrel<3>) -> Self
{
SquirrelVariant::V3(s)
}
}
fn make_squirrel_variant2<const VAR: u8>(s: Squirrel<VAR>) -> SquirrelVariant
{
s.into() // the trait `From<Squirrel<VAR>>` is not implemented for `SquirrelVariant`
// = help: the following implementations were found:
// <SquirrelVariant as From<Squirrel<1_u8>>>
// <SquirrelVariant as From<Squirrel<2_u8>>>
// <SquirrelVariant as From<Squirrel<3_u8>>>
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用以下技巧来解决类型错误:
You can use the following trick to resolve the type errors: