C ++常见方案的类锈解决方案

时间:2019-10-16 08:54:41

标签: rust interior-mutability

我从Rust开始,我有C ++背景。我已经读了整本书,是时候加强我的例子了。我有一个小项目,可在需要的地方练习:

  • 将创建符合特征的子结构的结构。我将需要通过通用参数指定实际的子结构类型。诸如此类(下面的代码将不起作用):
pub trait Slave {
    fn new(configuration: String) -> Self;
}

struct SlaveImpl {
    configuration: String,
}

impl Slave for SlaveImpl {
    fn new(configuration: String) -> SlaveImpl {
        SlaveImpl { configuration }
    }
}

struct Master<T>
where
    T: Slave,
{
    slave: T,
}

impl<T> Master<T>
where
    T: Slave,
{
    fn new(configuration: String) -> Master<T>
    where
        T: Slave,
    {
        Master {
            slave: T::new(configuration),
        }
    }
}

fn main() {
    let master_save_impl = Master::<SlaveImpl>::new("SlaveImpl configuration path: ".to_owned());
}
  • 一种通过回调从从设备与主设备通信的方法。在C ++中,代码看起来像(此代码也可能无法工作,将其更多地作为伪代码使用):
class Master {
    Slave m_slave;
    public:
        void callback_from_slave();
}

class Slave {
    Master & m_master;
    public: 
        Slave(Master &master) : m_master(master) {}

     void something(){
        m_master.callback_from_slave();
     }
}

最后一部分是我很迷路的地方。根据我在书中所读的内容,Rust的所有权系统不允许我这样做,因为我会破坏所有权系统。另外,我还需要从属能够使用其调用回调修改Master,从而使“引用/指针/某些东西”必须可变。

我想到我可以以某种方式使用内部可变性,但我对此感到迷茫,我很想听听你们在这种情况下可以建议我做些什么。我觉得我并没有以真正的Rust方式考虑整个问题。我也对此持开放态度! :)

0 个答案:

没有答案