[英]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.