Предположим, у меня есть черта
trait A {
fn new() -> Self where Self : Sized;
fn foo(&self) -> i32;
}
struct B {
data : i32
}
impl A for B {
fn new() -> Self {
B {data : 42}
}
fn foo(&self) -> i32 {
self.data
}
}
Теперь я могу использовать Box<dyn A>
, у меня просто нет доступного метода new (). И когда у меня есть общий T : A
, я могу сделать T::new()
. Таким образом, я могу использовать A в качестве объекта-черты (без функций, которые могли бы предотвратить это), и я могу использовать его в шаблонном коде и использовать все функции в нем.
Мой вопрос: возможно ли получить это? поведение, когда, например, Clone
в качестве супертрейта? В случае dyn A
A
не реализует Clone. В общем случае это делает.