2015-10-10 50 views
5

我有一個結構,有時我靜態實例化,有時我想用戶在堆上分配。是否可以允許兩個參數作爲一個函數?允許靜態變量和框作爲函數參數嗎?

pub struct MyData { 
    x: i32 
} 

static ALLOCATED_STATICALLY: MyData = MyData {x: 1}; 

// what should my signature be? 
fn use_data(instance: Box<MyData>) { 
    println!("{}", instance.x); 
} 

fn main() { 
    use_data(Box::new(MyData{x: 2})); 
    // this doesn't work currently 
    use_data(ALLOCATED_STATICALLY); 
} 

回答

9

在這兩種情況下,都可以將指針傳遞給函數。

pub struct MyData { 
    x: i32 
} 

static ALLOCATED_STATICALLY: MyData = MyData { x: 1 }; 

// what should my signature be? 
fn use_data(instance: &MyData) { 
    println!("{}", instance.x); 
} 

fn main() { 
    use_data(&Box::new(MyData{ x: 2 })); 
    use_data(&ALLOCATED_STATICALLY); 
} 

注意,在這兩種情況下,調用者需要使用&操作者採取的值的地址。在第一次調用中,運算符產生&Box<MyData>,但編譯器自動將其轉換爲&MyData,因爲Box實現了Deref trait

+2

說「參考」而不是「指針」可能會更好。後者讓我想到一個*原始指針*'* const T'。 – Shepmaster

相關問題