Описание тега trait-objects

По вопросам, связанным с Trait Objects (объекты с динамической отправкой) в Rust
2 ответа

Дженерики плюс динамическая отправка

Рассмотрим случай, когда у меня есть функция make_numbers который должен создать строку случайных чисел, но где я хочу решить во время выполнения (пользовательский ввод), какой тип генератора случайных чисел следует использовать. Чтобы сделать это е…
28 окт '18 в 10:21
1 ответ

Как реализованы черты объектов в Rust?

Я пытаюсь понять, как черты объектов реализованы в Rust. Пожалуйста, дайте мне знать, если следующее понимание верно. У меня есть функция, которая принимает любой тип, который реализует Write черта характера: fn some_func(write_to: &mut Write) {…
01 дек '17 в 20:27
2 ответа

Указатель на функцию и объект Fn

fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition f(arg) + f(arg) } do_twice(|x| x + 1, 5) // call Эта функция принимает как замыкания, так и указатели функций. Он принимает указатель на функцию в качестве типа параметра. Когда я…
14 янв '19 в 12:45
1 ответ

Как вывести значение из объектно-безопасного объекта черты?

Mech несет водителя, который является Named юридическое лицо. Во время выполнения, опущено Mech Конструктор консультируется с внешним источником для конкретного типа драйвера для использования. trait Named { fn name(self) -> String; } struct Pers…
20 июн '18 в 13:26
1 ответ

Почему некоторые методы std::fmt::Debug* используют динамическую диспетчеризацию?

Эти методы используют динамическую диспетчеризацию (получают объект признака &Debug как параметр): DebugMap::entry DebugSet::entry DebugStruct::field DebugTuple::field DebugList::entry Эти методы используют статическую диспетчеризацию и написаны…
24 май '16 в 15:27
2 ответа

Rc<Trait> для Option<T>?

Я пытаюсь реализовать метод, который выглядит следующим образом: fn concretify&lt;T: Any&gt;(rc: Rc&lt;Any&gt;) -&gt; Option&lt;T&gt; { Rc::try_unwrap(rc).ok().and_then(|trait_object| { let b: Box&lt;Any&gt; = unimplemented!(); b.downcast().ok().map…
12 янв '17 в 16:19
1 ответ

Можно ли передать функцию Arc<RwLock <& Fn () >> в функцию без использования параметра типа?

Я должен пройти Arc&lt;RwLock&lt;&amp;Fn()&gt;&gt; к функции: use std::sync::{Arc, RwLock}; fn main() { let closure = || println!("Hello World"); let wrapped_closure = Arc::new(RwLock::new(&amp;closure)); execute(wrapped_closure); } fn execute(f: Ar…
19 июн '18 в 18:48
1 ответ

Как мне создать объект черты из другого объекта черты?

Последняя стабильная версия Rust (1.27) позволяет реализовать черту для объектов черты (dyn Trait), поэтому я попробовал следующее: trait T1 { fn f1(&amp;self); } trait T2 { fn f2(&amp;self); } impl T2 for dyn T1 { fn f2(&amp;self) { self.f1() } } s…
07 июл '18 в 11:55
0 ответов

Как преобразовать объект черты в объект "суб-черта"?

Этот код: trait A {} trait B: A {} struct S; impl A for S {} impl B for S {} fn main() { let s = S; let trait_obj_b: &amp;B = &amp;s; let trait_obj_a: &amp;A = trait_obj_b; } не удается с ошибкой: error[E0308]: mismatched types --&gt; src/main.rs:14…
24 апр '18 в 14:23
1 ответ

Совместное использование слабых признаков объекта

Я пытаюсь предоставить "взгляды" на не принадлежащие ему структуры для разделения компонентов системы. Предположим, набор черт с различными методами: Drawable, Modifiable и ряд структур, которые реализуют по крайней мере одну из черт - SimpleBox, Pa…
31 июл '18 в 20:00
1 ответ

Реализация метода признаков по умолчанию для всех объектов признаков

У меня есть черта MyTraitи я хочу все черты объектов &amp;MyTrait быть сопоставимыми друг с другом и ни с чем другим. У меня есть это сейчас на основе Как проверить на равенство между чертами объектов?, Проблема в том, что мне нужно использовать MyT…
3 ответа

Непонятная ошибка в Rust с временем жизни объекта trait

Может кто-нибудь сказать, в чем проблема со следующим кодом? Компилятор жалуется на время жизни, но сообщение об ошибке не имеет абсолютно никакого смысла. Я перепробовал все, что мог придумать, но ничего не помогло. use std::borrow::BorrowMut; trai…
06 сен '16 в 01:28
0 ответов

Как использовать объект черты в BinaryHeap?

У меня есть следующий упрощенный код: use std::collections::BinaryHeap; use std::rc::Rc; struct JobId; struct Coord; struct TimeStep; pub trait HasJob { fn id(&amp;self) -&gt; JobId; fn start(&amp;self) -&gt; Coord; fn end(&amp;self) -&gt; Coord; fn…
06 мар '18 в 18:49
1 ответ

Подходим руки, которые возвращают итераторы?

У меня есть некоторый код, который пытается выполнить сопоставление, где каждая ветвь может возвращать свой тип, но все эти типы реализуют Iterator&lt;Item=usize&gt;, let found: Iterator&lt;Item = usize&gt; = match requirements { Requirements::A =&g…
17 янв '17 в 18:32
1 ответ

Разница между &mut и ref mut для объектов черты

Прежде всего, я не спрашиваю, в чем разница между &amp;mut а также ref mut как таковой. Я спрашиваю, потому что я думал: let ref mut a = MyStruct такой же как let a = &amp;mut MyStruct Подумайте о возвращении объекта-черты из функции. Вы можете верн…
06 дек '17 в 17:45
3 ответа

Как создать Box<T>, когда T является объектом-признаком?

У меня есть следующий код extern crate rand; use rand::Rng; pub struct Randomizer { rand: Box&lt;Rng&gt;, } impl Randomizer { fn new() -&gt; Self { let mut r = Box::new(rand::thread_rng()); // works let mut cr = Randomizer { rand: r }; cr } fn with_…
29 авг '16 в 23:52
2 ответа

Как получить v-ptr для данной комбинации Trait/Struct?

В Русте &amp;T где T это trait это жирная ссылка, которая на самом деле соответствует raw::TraitObject: pub struct TraitObject { pub data: *mut (), pub vtable: *mut (), } С помощью TraitObject можно деконструировать и реконструировать &amp;T на досу…
17 май '15 в 14:40
0 ответов

Смущает время жизни Box<Trait> в структуре

struct Wrap&lt;'a&gt; { pub data: Option&lt;&amp;'a i32&gt;, } pub trait Boxable { fn get_data(&amp;self) -&gt; Option&lt;&amp;i32&gt;; } impl&lt;'a&gt; Boxable for Wrap&lt;'a&gt; { fn get_data(&amp;self) -&gt; Option&lt;&amp;i32&gt; { self.data } }…
13 дек '18 в 12:41
2 ответа

ВЕК Дженериков Различных Бетонных Типов

У меня есть черта Foo, а конкретные типы A и B ограничены чертой Foo. Я хочу вернуть Vec&lt;Foo&gt;где Foo может быть конкретным типом A или B, как показано ниже: trait Foo { } pub struct A {} pub struct B {} impl Foo for A {} impl Foo for B {} fn t…
08 ноя '18 в 21:42
1 ответ

Можно ли автоматически реализовать черту, которая преобразует объект черты в другой объект черты?

У меня есть черта, которая управляет преобразованием в различные объекты черты. Черта выглядит так: (Boo а также Gee это разные черты) trait Foo { fn as_boo(&amp;mut self) -&gt; Option&lt;&amp;mut Boo&gt; { None } fn as_gee(&amp;mut self) -&gt; Opti…
04 авг '17 в 08:25