这是C ++中虚函数的定义,它本质上是我想在Rust中做的事情:
虚拟功能是您期望的成员功能 在派生类中重新定义。当您引用派生类对象时 使用指针或对基类的引用,可以调用 该对象的虚函数并执行派生类 功能的版本。
我有一个包含一些字节的结构Foo
。
我想为Foo
分配辅助结构;可以有许多不同类型的助手,(Helper1
,Helper2
等),但每个助手都有相同的布局。每个帮助器将始终具有read()
函数,该函数从Foo
读取字节,但它们将根据自己的计算返回略微不同的值(因此需要多个不同的结构)。我选择分配给Foo
的帮助程序将在运行时确定,但我想包含某种类型的“通用帮助程序结构”来满足编译器。在确定在运行时使用哪个帮助程序后,通用帮助程序将替换为特定的帮助程序结构。
我正在努力实现这样的目标:
pub struct Foo {
bytes: Vec<u8>,
helper: GenericHelper???
}
impl Foo {
pub fn set_helper(&mut self, arg1: i32) {
match arg1 {
1 => {
self.helper = DerivedHelperA;
}
2 => {
self.helper = DerivedHelperB;
}
_ => {
self.helper = DerivedHelperDefault;
}
}
}
// Called after set_helper()
pub fn read(&self, arg1: usize) -> u8 {
//helper.read() will call the re-defined read() function in the derived class
self.helper.read(arg1)
}
}