Generics 从Rust中的特征函数构造泛型结构

Generics 从Rust中的特征函数构造泛型结构,generics,design-patterns,rust,traits,higher-kinded-types,Generics,Design Patterns,Rust,Traits,Higher Kinded Types,我想写一个trait,它允许我构造实现类型的新结构,但是使用不同的类型参数。例如,假设我有一些结构 struct-Generic{ t:t, } 我想要一个trait可构造的,它允许我从_q::(q as q)调用Generic::new\u,也就是说,我的trait看起来像这样(在pseudo-rust中): trait可构造{ fn new_from_q(q:q)->Self;//Self将是通用的 } 泛型的可构造impl{ 类型T=T; fn新的\u来自\u q(q:q)->通用{ 泛

我想写一个trait,它允许我构造实现类型的新结构,但是使用不同的类型参数。例如,假设我有一些结构

struct-Generic{
t:t,
}
我想要一个trait
可构造的
,它允许我从_q::(q as q)调用
Generic::new\u,也就是说,我的trait看起来像这样(在pseudo-rust中):

trait可构造{
fn new_from_q(q:q)->Self;//Self将是通用的
}
泛型的可构造impl{
类型T=T;
fn新的\u来自\u q(q:q)->通用{
泛型{t:q}
}
}
当然,这没有任何意义,因为trait不能保证
Self
能够接受类型参数
Q
。我最接近于实现所需的构造函数行为的是:

trait可构造{
T型;
fn new_from_q(q:q)->impl Constructable;//当前无效
}
()由于
impl Trait
语法的限制,这目前是不可能的

  • 不允许在特性中使用
  • 无法获取关联类型的值

那么,我如何克服这些限制呢?是否有一些常见的编程模式允许我这样做(我希望避免使用动态特性对象)?

我实际上不明白这样做的真正目的,但您是否正在寻找这样的解决方案:?我的具体用例是我有一堆结构(表示数值积分器并实现一个
积分器
特征)存储闭包(被集成的函数),并希望能够创建这些结构的新实例,但存储不同的闭包(创建相同算法类型的新积分器,但在新方程上).我认为你的解决方案在这里不起作用。这听起来像是一种习惯特征。看看下面的例子。