我正尝试用Rust实现类似于C++中类的虚函数的功能。首先定义一个基础结构体,包含数据,然后保留一些未定义的函数,就像下面这个例子:
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) {...}
}
foo
和xxx
作为函数名称的虚假问题),并查看你的新工具箱来解决。如果你试图直接将类继承翻译成Rust代码,你会找到一种使其运行的方法,但与更符合Rust惯例的代码相比,代码可能非常笨重。 - Dietrich Epp