在C++中,類似於struct A
的東西由struct B
組成,並且B
的某些函數將一個指向父對象A
的指針。所以調用B
函數的A
函數將簡單地將this
指針傳遞給它。我想這鏽,但未能得到它的工作 - 這是我想達到什麼:無法保持/傳遞父對象到構圖對象的引用
struct A<Type: T> {
composition: Type,
value: usize,
}
impl<Type> A<Type> where Type: T {
fn new(obj: Type) -> A<Type> {
A {
composition: obj,
value: 999,
}
}
fn f(&mut self) {
println!("Value: {:?}", self.value);
}
fn call(&mut self) {
self.composition.f(&mut self);
}
}
trait T {
fn f(&mut self, &mut A<Self>);
}
struct B {
value: usize,
}
impl B {
fn new() -> B {
B { value: 0, }
}
}
impl T for B {
fn f(&mut self, parent: &mut A<B>) {
println!("B::f");
parent.f();
}
}
fn main() {
let objA = A::new(B::new());
// I want call sequence -> A::call() -> B::f() -> A::f()
objA.call();
}
注意,我需要在可變性的所有功能雖然例如上面也許看起來&mut self
在大多數函數參數沒有多大意義。它在Rust中如何做到這一點?