gpt4 book ai didi

rust - 引用具有关联类型的通用特征作为结构字段

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

我正在努力说服 Rust 接受对实现通用特征的实例的引用,并将关联类型作为结构字段的值。您能否提供一些线索,说明下面的代码有什么问题。

trait TraitA{}

trait TraitB{
type As: TraitA;
}

struct StructA;

impl TraitA for StructA{}

struct StructB;

impl TraitB for StructB{
type As = StructA;
}

struct StructC<'a> {
r: &'a (dyn TraitB<As = (dyn TraitA)> + 'a),
}


fn main(){
let x = StructB;
let z = StructC {
r: &x,
};
}

Playground

最佳答案

关于发布的编译器错误

引起问题的事实是 TCPtransport不执行 Transport<.., Configuration=(dyn TransportConfiguration<SyncReq>> ,相反,它实现 Transport<.., Configuration=TcpTranportCfg> ,后面的一个不能转换为前者:

playground

可能的解决方案:添加新特征(基本上去除关联的类型信息):

trait SyncReqTransport{
...
}

impl<T> SyncReqTransport<SyncReq> for T
where
T: Transport<SyncReq>, // I Removed other parameters for simplicity
<T as Transport<SyncReq>>::Config: TransportConfiguration<SyncReq>
{
...
}

并更改DAG

pub struct DAG<'a, T> {
request_transport: &'a (dyn SyncReqTransport + 'a),
}

另一个问题

sr_transport在堆栈上创建,然后引用它从返回它创建的函数,这是非法的。

关于rust - 引用具有关联类型的通用特征作为结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723354/

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