traits 相关问题

在计算机编程中,特征是一组方法,用作“构建面向对象程序的简单概念模型”

了解 Rust 中的密封特征

我正在尝试创建一个模拟对象以在我的 Rust 项目中进行测试。我遇到一个问题,我想实现一个通用特征,其类型参数还必须实现另一个特征...

回答 1 投票 0

有没有办法阻止结构体实现特征方法?

我只是构建了一个具有 2 个函数的特征 Bar(带有实现的 alpha() 和仅带有接口的 beta()),并且我希望实现 Bar 的结构体仅实现 beta(),并且永远不要实现自己的

回答 1 投票 0

通过控制器 Larael 中的 Trait 触发 JSON 响应

我正在使用 Laravel 8 构建一个 API,我有一条路线,出于问题的目的,它是... /api/fact ,它获取一个随机事实。我有一个 FactsController.php 文件和两个特征,一个用于构造...

回答 1 投票 0

Rust 中的多重继承

我刚刚开始接触 Rust(来自 python 和 C#)世界,我知道这个问题已经被问过很多次了,但我很难理解答案,因为它们非常通用(Foo、Bar、Ba ...

回答 1 投票 0

为什么特征对象通常通过引用(&dyn Trait)或智能指针(如 Box)来使用<dyn Trait)?

在 Rust 中,为什么特征对象通常通过引用(&dyn 特征)或智能指针(如 Box)来使用 在 Rust 中,为什么特征对象通常通过引用(&dyn 特征)或智能指针(如 Box)来使用 它们是通过引用和智能指针处理的,因为否则它们将无法编译: trait Foo {} struct Bar; impl Foo for Bar {} fn main() { let f1: dyn Foo = Bar; let f2: dyn Foo = Bar as dyn Foo; } error[E0308]: mismatched types --> src/main.rs:6:23 | 6 | let f1: dyn Foo = Bar; | ------- ^^^ expected `dyn Foo`, found `Bar` | | | expected due to this | = note: expected trait object `dyn Foo` found struct `Bar` = help: `Bar` implements `Foo` so you could box the found value and coerce it to the trait object `Box<dyn Foo>`, you will have to change the expected type as well error[E0620]: cast to unsized type: `Bar` as `dyn Foo` --> src/main.rs:7:23 | 7 | let f2: dyn Foo = Bar as dyn Foo; | ^^^^^^^^^^^^^^ | help: consider using a box or reference as appropriate --> src/main.rs:7:23 | 7 | let f2: dyn Foo = Bar as dyn Foo; | ^^^ error[E0277]: the size for values of type `dyn Foo` cannot be known at compilation time --> src/main.rs:6:9 | 6 | let f1: dyn Foo = Bar; | ^^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `dyn Foo` = note: all local variables must have a statically known size = help: unsized locals are gated as an unstable feature help: consider borrowing here | 6 | let f1: &dyn Foo = Bar; | + A dyn Trait 是一种动态类型,表示实现该 Trait 的任何潜在具体类型。由于它代表各种可能不同大小的类型,因此它本身没有固定的大小。这称为 动态调整大小的类型 (DST)。 因为它们没有固定的大小,所以我们可以放置它们的位置受到限制。特别是 DST 不能存储在变量中;如果存储在结构中,它会使该结构成为 DST,因此也不能存储在变量中。有一个 unsized locals RFC 可能在未来使其成为可能,但现在它的命运尚不清楚。 旁注:您仍然可以将变量引用为动态特征,但这是因为变量仍然是已知的具体类型,即使特征对象动态访问它: fn main() { let b = Bar; let f: &dyn Foo = &b; } 因此,为了使用 DST,需要一些间接的方法;该值必须存储在其他地方,并且只能通过引用或智能指针(例如 Box)来引用(Rc,Arc,也可以)。 技术上无关,但无论如何值得一提:对特征对象的引用和智能指针是“胖”的。这意味着它们实际上存储两个指针:一个指向数据,另一个指向映射到与该特征实现关联的特征函数的 v 表。请参阅什么是“胖指针”?了解更多信息。

回答 1 投票 0

如何不安全地从 Box 获取具体参考<dyn Trait>?

我想引用Box中的特定结构。我确切地知道该结构是什么,所以我可以使用不安全的操作。当我使用原始指针对其进行类型转换时,它会给出 SIGSEGV。

回答 1 投票 0

将 Box<dyn Trait> 转换为实现该特征的特定结构

我想将 Box 转换为实现该特征的特定结构。我知道结构是什么,所以我可以接受不安全的操作。当我使用原始指针对其进行类型转换时......

回答 1 投票 0

理解`impl dyn Trait`

我无法理解第二个 impl 块。 根据我的理解, impl 通常用于在结构等具体类型上实现特征/方法。 然而,实施意味着什么

回答 1 投票 0

了解 Rust 编译器的名称解析过程

我无法理解第二个 impl 块。 根据我的理解, impl 通常用于在结构等具体类型上实现特征/方法。 然而,实施意味着什么

回答 1 投票 0

在 Rust 中,为什么泛型作为参数传递时需要将生命周期指定为“static”?

结构TestStruct { 参数:F, } 特征测试特征{} 为 TestStruct 实现 TestTrait {} fn t(输入:F) -> Box { 框::新(TestStruct {

回答 1 投票 0

为什么“impl Trait”语法不适用于两个参数?

我在示例 Rust 项目中创建了一个函数,该函数比较实现 PartialOrd 特征的类型的两个值,但它未编译: fn 主(){ 让x:i32 = 5; 让 y: i32 = 6; d...

回答 2 投票 0

为什么“impl Trait”语法不适用于两个参数?

我在示例 Rust 项目中创建了一个函数,该函数比较实现 PartialOrd 特征的类型的两个值,但它未编译: fn 主(){ 让x:i32 = 5; 让 y: i32 = 6; d...

回答 2 投票 0

是否可以在特征上拥有通用函数?

我有: 结构 Plumbus<'a> { grumbo: &'a dyn Grumbo, } 特质格伦博{ fn dinglebop(&self, x: &mut T) -> bool { false } } 但我得到: 错误[E0038]:特征`...

回答 2 投票 0

使用 Option<T> 作为返回对其引用的特征中的关联类型

我有一个具有关联类型 Value 的特征和两个方法。一个返回 &Self::Value,另一个接收 Self::Value。此特征已针对多种类型实现,但我想实现...

回答 1 投票 0

为什么我不能指定特征的子类?

scala> A 类 定义A类 scala> 特征 T 扩展 A { val t = 1 } 定义性状T //为什么我可以这样做? scala> 类 B 扩展 T 定义B类 scala> 新 B res0: B = B@2e9c76 是...

回答 4 投票 0

使用 from_fn_with_state 中间件时如何修复服务特征错误?

我正在创建一个中间件函数来验证传入的请求。我已经阅读了 Axum 的文档和其他一些示例。我陷入了编译器特征错误。 这是精简后的代码: #[

回答 1 投票 0

如何修复中间件 Axum 特征错误

我正在创建一个中间件函数来验证传入的请求。我已经阅读了 Axum 的文档和其他一些示例。我已经被编译器特征错误困扰了几天了。 我在这里...

回答 1 投票 0

为什么我的 `-> impl Future<...> + 'static` 特征方法上的 `+ 'static` 不受尊重?

我有一个特征函数,它引用 self 并返回一个“静态未来”。但我似乎无法使用它。编译器仍然坚持认为我的未来捕获了自我的生命周期,即使它

回答 1 投票 0

C++中如何检查模板函数是否存在?

有没有办法检查函数是否存在,无论它是否是模板化的? 例如: 模板 A级 { 民众: 模板 ...

回答 1 投票 0

如何从作为泛型参数的类型转换为作为泛型参数的特征(也显示限制)

我想要一个列表: 包含一些实现通用参数特征的值, 允许推送 T 类型的值并返回 IdOf, 并使用 IdOf 获取值, 该...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.