Описание тега 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<T: Any>(rc: Rc<Any>) -> Option<T> { Rc::try_unwrap(rc).ok().and_then(|trait_object| { let b: Box<Any> = unimplemented!(); b.downcast().ok().map…
12 янв '17 в 16:19
1
ответ
Можно ли передать функцию Arc<RwLock <& Fn () >> в функцию без использования параметра типа?
Я должен пройти Arc<RwLock<&Fn()>> к функции: use std::sync::{Arc, RwLock}; fn main() { let closure = || println!("Hello World"); let wrapped_closure = Arc::new(RwLock::new(&closure)); execute(wrapped_closure); } fn execute(f: Ar…
19 июн '18 в 18:48
1
ответ
Как мне создать объект черты из другого объекта черты?
Последняя стабильная версия Rust (1.27) позволяет реализовать черту для объектов черты (dyn Trait), поэтому я попробовал следующее: trait T1 { fn f1(&self); } trait T2 { fn f2(&self); } impl T2 for dyn T1 { fn f2(&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: &B = &s; let trait_obj_a: &A = trait_obj_b; } не удается с ошибкой: error[E0308]: mismatched types --> src/main.rs:14…
24 апр '18 в 14:23
1
ответ
Совместное использование слабых признаков объекта
Я пытаюсь предоставить "взгляды" на не принадлежащие ему структуры для разделения компонентов системы. Предположим, набор черт с различными методами: Drawable, Modifiable и ряд структур, которые реализуют по крайней мере одну из черт - SimpleBox, Pa…
31 июл '18 в 20:00
1
ответ
Реализация метода признаков по умолчанию для всех объектов признаков
У меня есть черта MyTraitи я хочу все черты объектов &MyTrait быть сопоставимыми друг с другом и ни с чем другим. У меня есть это сейчас на основе Как проверить на равенство между чертами объектов?, Проблема в том, что мне нужно использовать MyT…
24 мар '18 в 15:02
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(&self) -> JobId; fn start(&self) -> Coord; fn end(&self) -> Coord; fn…
06 мар '18 в 18:49
1
ответ
Подходим руки, которые возвращают итераторы?
У меня есть некоторый код, который пытается выполнить сопоставление, где каждая ветвь может возвращать свой тип, но все эти типы реализуют Iterator<Item=usize>, let found: Iterator<Item = usize> = match requirements { Requirements::A =&g…
17 янв '17 в 18:32
1
ответ
Разница между &mut и ref mut для объектов черты
Прежде всего, я не спрашиваю, в чем разница между &mut а также ref mut как таковой. Я спрашиваю, потому что я думал: let ref mut a = MyStruct такой же как let a = &mut MyStruct Подумайте о возвращении объекта-черты из функции. Вы можете верн…
06 дек '17 в 17:45
3
ответа
Как создать Box<T>, когда T является объектом-признаком?
У меня есть следующий код extern crate rand; use rand::Rng; pub struct Randomizer { rand: Box<Rng>, } impl Randomizer { fn new() -> 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?
В Русте &T где T это trait это жирная ссылка, которая на самом деле соответствует raw::TraitObject: pub struct TraitObject { pub data: *mut (), pub vtable: *mut (), } С помощью TraitObject можно деконструировать и реконструировать &T на досу…
17 май '15 в 14:40
0
ответов
Смущает время жизни Box<Trait> в структуре
struct Wrap<'a> { pub data: Option<&'a i32>, } pub trait Boxable { fn get_data(&self) -> Option<&i32>; } impl<'a> Boxable for Wrap<'a> { fn get_data(&self) -> Option<&i32> { self.data } }…
13 дек '18 в 12:41
2
ответа
ВЕК Дженериков Различных Бетонных Типов
У меня есть черта Foo, а конкретные типы A и B ограничены чертой Foo. Я хочу вернуть Vec<Foo>где 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(&mut self) -> Option<&mut Boo> { None } fn as_gee(&mut self) -> Opti…
04 авг '17 в 08:25