C++ позволяет создавать подтипы классов, что очень удобно, поскольку вы можете использовать функции, реализованные для базового класса, с производным классом. У Rust, кажется, нет ничего подобного. Эта функция, кажется, была доступна в какой-то момент, но с тех пор была удалена. Разве это невозможно в Rust? Если да, то есть ли планы по внедрению этой функции?
Что я хочу сделать, так это определить структуру, которая наследуется от другой структуры, которая в C++ будет выглядеть так:
struct Base {
int x;
int y;
void foo(int x, int y) { this->x = x; this->y = y; }
}
struct Derived: public Base {
...
}
void main() {
Derived d;
d.foo();
}
На мой взгляд, в Rust вам нужно написать что-то вроде этого, чтобы сделать одну и ту же функциональность доступной для всех «производных» структур:
struct Base<T> {
x: i32,
y: i32,
derived: T
}
impl<T> Base<T> {
fn foo(&mut self, x: i32, y: i32) {
self.x = x;
self.y = y;
}
}
Я думаю, что выполнение impl<T> for Base<T>
приведет к созданию тонны копий одной и той же функции, поэтому композиция на самом деле не вариант.
Я, вероятно, должен указать, что реализация выше была выбрана по той простой причине, что она позволяет более безопасную версию повышения приведения, что мне все равно нужно сделать.
virtual
функции), наследование от неполиморфных классов, как правило, является ошибкой (смешивает две концепции: отношение is-a и повторное использование кода). К счастью, у Rust есть преимущество задним числом, в Rust нет наследования :) - person Matthieu M.   schedule 20.06.2016