Generics 如何在Rust中添加一个泛型类型实现另一个泛型类型的约束?
我怎样才能使类似这样的工作:Generics 如何在Rust中添加一个泛型类型实现另一个泛型类型的约束?,generics,rust,traits,type-bounds,Generics,Rust,Traits,Type Bounds,我怎样才能使类似这样的工作: struct FooStruct<A, B> where A : B, B : ?Sized {...} 编译器失败,出现以下错误: -->src/lib.rs:15:57 | 15 |单体工厂的impl工厂,其中T:S+单体{ |^不是一种特征 我设法找到了一个答案:尽管在当前版本的Rust(1.14.0)中不是一个稳定的功能 pub trait Unsize其中T:?size{} 可以“不调整大小”为动态调整大小类型的类型 这比“implemen
struct FooStruct<A, B> where A : B, B : ?Sized {...}
编译器失败,出现以下错误:
-->src/lib.rs:15:57
|
15 |单体工厂的impl工厂,其中T:S+单体{
|^不是一种特征
我设法找到了一个答案:尽管在当前版本的Rust(1.14.0)中不是一个稳定的功能
pub trait Unsize其中T:?size{}
可以“不调整大小”为动态调整大小类型的类型
这比“implements”语义更广泛,但这是我从一开始就应该搜索的,因为示例代码中的泛型参数可以是一个结构和一个或两个特征之外的其他东西(比如大小和非大小数组)
问题中的一般示例可以写成:
struct FooStruct<A, B>
where A: Unsize<B>,
B: ?Sized,
{
// ...
}
struct FooStruct
其中A:Unsize,
B:尺寸,
{
// ...
}
我的代码是:
impl<S, T> Factory<S> for SingletonFactory<T>
where S: ?Sized,
T: Unsize<S> + Singleton<T>,
{
// ...
}
SingletonFactory的impl工厂
其中S:?尺寸,
T:Unsize+Singleton,
{
// ...
}
我不知道
Unsize
,它无疑打开了新的大门!是的,它被深深地隐藏在文档中:)这个RFC提供了一些关于它的信息:。非常感谢你的帮助:)再次感谢你挖掘Unsize
,享受免费广告;)谢谢,非常好:)
struct FooStruct<A, B>
where A: Unsize<B>,
B: ?Sized,
{
// ...
}
impl<S, T> Factory<S> for SingletonFactory<T>
where S: ?Sized,
T: Unsize<S> + Singleton<T>,
{
// ...
}