私はクラスにC++仮想関数のように動作しますラストで何かを実装しようとしているが、私はデータと基本構造体を持っているでしょうし、私は次の例のように、未定義の一部の機能を維持するだろう:C++の仮想関数に相当するRustとは何ですか?
class A {
int stuff;
public:
virtual void foo(int a, int b) = 0;
void function_that_calls_foo() { /*...*/ foo(1, 2); /*...*/ }
}
class B: public A { void foo(int a, int b) { /* ... */ } }
私は関数ポインタを使って実装しようとしていましたが、あまり成功しませんでした。私はAの関数で特性を使用し、他のクラスでAを実装することができますが、構造体のデータは失われます。 Rustでこのようなことを実行するには、最速の方法は何ですか?
struct A {
...
}
impl A {
fn function_that_calls_foo(&self) {
...
self.foo(a, b);
...
}
}
struct B {
a: A;
}
impl B {
fn xxx(&self) {
a.function_that_calls_foo(1, 2);
}
fn foo(&self, a: i32, b: i32) {...}
}
あなたは[形質オブジェクト](https://doc.rust-lang.org/book/second-edition/ch17-02-trait-objects.html)を探しています。 –
だから、錆は非常に大事です。* Composition Over Inheritance *。 –
これらの種類の質問は、 "私はどのようにクラスの継承を行うのですか?"あなたが解決しようとしている実際の問題(関数名の 'foo'と' xxx'での偽の問題ではなく)を解決し、あなたの新しいツールボックスを見て。クラス継承を直接Rustコードに変換しようとすると、それを動作させる方法がわかりますが、コードはもっと慣用的なRustコードと比べて非常に厄介かもしれません。 –