Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 图的锈迹中的异质容器 我是一个学习生锈的C++程序员,我的主要用例之一是基于图形的计算引擎。在我的图中,我存储了一个齐次类型,然后我从中派生出一个更具体的类型,例如C++ 类基本节点{ 公众: 基本节点(标准::向量和父节点); virtual~BaseNode()=默认值; 虚拟空更新(); 常量std::vector&parents()常量; ... }; 模板 类TypedNode:公共基节点{ 公众: 常量T&value()常量{返回值} ... 私人: T值; }_Rust_Graph Theory_Container Data Type - Fatal编程技术网

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;
}

我不确定我是否理解你的问题。如果不适用,请告诉我。

也适用于此处的返回值。