Rust 图的锈迹中的异质容器 我是一个学习生锈的C++程序员,我的主要用例之一是基于图形的计算引擎。在我的图中,我存储了一个齐次类型,然后我从中派生出一个更具体的类型,例如C++ 类基本节点{ 公众: 基本节点(标准::向量和父节点); virtual~BaseNode()=默认值; 虚拟空更新(); 常量std::vector&parents()常量; ... }; 模板 类TypedNode:公共基节点{ 公众: 常量T&value()常量{返回值} ... 私人: T值; }
其思想是遍历图形,并在每个节点上调用Rust 图的锈迹中的异质容器 我是一个学习生锈的C++程序员,我的主要用例之一是基于图形的计算引擎。在我的图中,我存储了一个齐次类型,然后我从中派生出一个更具体的类型,例如C++ 类基本节点{ 公众: 基本节点(标准::向量和父节点); virtual~BaseNode()=默认值; 虚拟空更新(); 常量std::vector&parents()常量; ... }; 模板 类TypedNode:公共基节点{ 公众: 常量T&value()常量{返回值} ... 私人: T值; },rust,graph-theory,container-data-type,Rust,Graph Theory,Container Data Type,其思想是遍历图形,并在每个节点上调用update()。节点知道其每一个父节点的“真类型”是什么,因此在其update()中可以执行类似于静态\u转换(父节点()[0])的操作 我如何在Rust中实现类似的功能 我考虑过这样的设计: trait-BaseNode{ fn父母(和自己)->Vec; } 特征类型节点:BaseNode{ fn值(&self)->&T; } 但是我读到我无法将“trait对象”从BaseNode转换为TypedNode。(或者我可以使用不安全的?)以某种方式执行此操作
update()
。节点知道其每一个父节点的“真类型”是什么,因此在其update()
中可以执行类似于静态\u转换(父节点()[0])
的操作
我如何在Rust中实现类似的功能
我考虑过这样的设计:
trait-BaseNode{
fn父母(和自己)->Vec;
}
特征类型节点:BaseNode{
fn值(&self)->&T;
}
但是我读到我无法将“trait对象”从
BaseNode
转换为TypedNode
。(或者我可以使用不安全的?)以某种方式执行此操作)。我认为的另一种选择是使用一个将数据存储在Any
中的结构,然后对其进行强制转换,但这会带来一些运行时成本吗?如果所有节点的父节点都具有相同的类型,则可以使用该方法:
trait BaseNode {
type Parent: BaseNode;
fn parents(&self) -> &[Self::Parent];
}
trait TypedNode<P: BaseNode>: BaseNode<Parent = P> {
type ValueType;
fn value(&self) -> &Self::ValueType;
}
trait-BaseNode{
父类型:BaseNode;
fn父项(&self)->和[self::Parent];
}
特征类型节点:BaseNode{
类型值类型;
fn值(&self)->&self::ValueType;
}
我不确定我是否理解你的问题。如果不适用,请告诉我。也适用于此处的返回值。