我从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());
}
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方式考虑整个问题。我也对此持开放态度! :)