C++允許使用類子類型,這非常方便,因爲您可以使用派生類爲基類實現的函數。 Rust似乎沒有這樣的東西。該功能似乎在某些時候已經可用,但自此之後已被刪除。這在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();
}
的方式我看它,在防鏽你必須寫,爲了這樣的事情使可用於所有「衍生」結構相同的功能:
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>
會產生一噸的相同功能的拷貝,所以成分是不是一個真正的選擇。
我應該指出,上面的實現被選中的原因很簡單,它允許一個更安全的upcasting版本,無論如何我都需要這樣做。
鐵鏽甚至沒有類。它爲運行時多態性使用基於特徵的系統。你可以添加一個你想要的東西的例子(也許用C++編寫的工作代碼)?然後我們可以告訴你如何將它寫入Rust :) –
編輯原始文章更清晰。 – eugene2k
作爲一名C++程序員,我覺得需要指出的是,指導原則是**優先於繼承構成**,而您的示例通常被認爲是反模式。繼承應該只用於重寫行爲(又名'虛擬'函數),從非多態類繼承通常是一個錯誤(混合兩個概念:是 - 關係和代碼重用)。幸運的是,Rust具有後見之明,在Rust中沒有繼承:) –