簡體   English   中英

如何在 rust 特征中聲明這樣的 function

[英]How can I declare a function like this in rust trait

例如。 需要一個全局 object 並在運行時確定 object

class A{
};

A* a = nullptr;


// B inherit from A
void Import(B* b){
    a = b;
}

我嘗試過使用 Dyn 但必須確定類型

static mut instance: &dyn plugin::BasePlugin;
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^help: provide a definition for the static: `= <expr>;`

您不應使用static mut 這是一個不安全的設計結構,適用於低級代碼,而不是只需要全局變量的普通用戶。

Rust 假定不存在單線程程序,因此每個全局變量都必須是線程安全的。 因此,要對其進行變異,您將不得不使用Mutex或其他一些線程安全替代方案,例如ArcSwap 您將需要lazy_static來初始化這些類型。

您將無法在全局變量中僅使用任何臨時范圍受限的引用。 &不是引用 Rust 中對象的通用方式。 考慮改用Box<dyn BasePlugin>Arc<dyn BasePlugin> 這些允許通過引用保存對象,而沒有范圍生命周期限制。

您可以使用&'static引用,但實際上這需要泄漏堆 memory。 如果您打算設置一次變量,那就沒問題了。 如果您打算多次設置它,那並不優雅,並且可能會出現問題。

最后,考慮完全不使用全局變量。 創建您需要存儲在局部變量中的對象(甚至早在main()中),並將它們作為 arguments 傳遞給需要它們的函數。 您可以制作一個struct App並將您需要的數據作為該結構的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM