2015-09-23 1 views
13
struct Foo: Bar { 

} 

Когда я скомпилирую это, компилятор сообщает мне, что virtual structs были удалены с языка.Каков наилучший способ наследования структуры в Rust 1.3?

Во время публикации этого вопроса Rust 1.3 является текущей стабильной версией.

+1

http://aturon.github.io/blog/2015/09/18/reuse/ имеет несколько рабочих примеров из Серво, если вам действительно нужно наследование. – ArtemGr

ответ

7

Короткий ответ, вы не можете наследовать с помощью структур.

Вместо наследования Руста использует состав. Тем не менее, вы можете сделать наследование в пределах traits. Черты характера не имеют данных, но они могут определить функции, так что вы можете получить довольно много преимуществ наследования:

trait Foo { 
    fn foo(&self); 
} 

trait FooBar: Foo { 
    fn foobar(&self); 
} 

реализатор FooBarдолжен осуществлять foo (если не обеспечить реализацию по умолчанию) ,

Один способ Rust делает специализацию, как правило, через enums, которые являются очень мощными в Rust. Один из разработчиков Rust написал a good blog series about how Rust approaches these types of problems. Я рекомендую прочитать его, а также прочитать официальную книгу (ранее связанную).

Смежные вопросы