我怎么能在Rust中实现C ++虚函数?

时间:2017-10-25 18:03:46

标签: struct rust

这是C ++中虚函数的定义,它本质上是我想在Rust中做的事情:

  

虚拟功能是您期望的成员功能   在派生类中重新定义。当您引用派生类对象时   使用指针或对基类的引用,可以调用   该对象的虚函数并执行派生类   功能的版本。

我有一个包含一些字节的结构Foo

我想为Foo分配辅助结构;可以有许多不同类型的助手,(Helper1Helper2等),但每个助手都有相同的布局。每个帮助器将始终具有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)
    }
}

0 个答案:

没有答案