当前位置: 首页 > 知识库问答 >
问题:

引用的在trait对象中使用泛型类型参数的问题是什么?

佘茂才
2023-03-14
trait Creator<T> {
    fn create(&self) -> T;
}

struct CreationHouse {
    creators: Vec<Box<dyn Creator<u32>>>
}

struct NumCreator { seed: u32 }

impl Creator<u32> for NumCreator {
    fn create(&self) -> u32 {
        return self.seed;
    }
}

fn main() {
    let ch = CreationHouse{
        creators: vec![Box::new(NumCreator{seed: 3})]
    };
}

共有1个答案

叶坚
2023-03-14

“使用特征时用具体类型参数填充的泛型类型参数”是什么意思?

一个不起作用的例子是当类型参数是方法的一部分时:

trait Foo {
    fn foo<T>(t: T) {}
}

当一个函数有一个类型参数时,Rust会为实际调用它的每个类型单构化函数(制作一个新的副本)。这与trait对象不兼容,因为Rust直到运行时才知道该方法属于哪个impl。

 类似资料:
  • 问题内容: 我有以下课程(来自简单的Spring教程) 其中Validator类是Spring 2.5中的类。 如果我尝试向其中添加参数,则supports方法显示警告(Class是原始类型。对泛型类型Class的引用应进行参数化) 我收到以下错误: 关于这种类型的问题有很多线索,但是我想获得一个完整的答案并真正理解它,而不会用“隐藏”这个问题! 问题答案: 接口使用原始类型声明该方法。在这种情况

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 问题内容: 我看到了有关一个不相关问题的一些代码,但它使我感到好奇,因为我从未见过Java Generics这样的构造。创建可以将自身或自身后代用作类型参数的泛型类的用途是什么。这是示例: 首先想到的是一个以列表为参数的列表。使用此代码感到很奇怪,如何声明A类型的变量?递归声明! 这还行吗?如果是这样,您在代码中看到过吗?如何使用? 编辑 确实,事实证明我的问题与这个问题相同,只是用不同的措词,但

  • 问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明

  • 我正在尝试创建一个通用函数,它接受一个,并返回一个对象,该对象包含公共基类型的属性以及特定类型的默认值。出于某种原因,如果没有编译器的抱怨,我无法让它工作。我不确定问题出在哪里,但是 我怀疑这可能是将类型定义为条件类型的方式。我尝试过以各种方式重新定义我的类型,但没有成功,所以我怀疑我要么错过了一些明显的东西,要么没有类型断言是不可能的。 以下是我的类型: 以下是我的通用函数: 产生以下错误: 类

  • 我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误: