2个版本
0.1.1 | 2020年10月9日 |
---|---|
0.1.0 | 2020年10月8日 |
#70 in #global
6KB
static-instance
static-instance
包提供了一个宏,用于创建对象的安全静态实例。这是为了复制C++中频繁使用的静态类成员的行为。当库需要跟踪状态时,这使得将Rust通过FFI导出到C变得更加容易。
注意
使用实例内部数据的安全性取决于您。除非您将其改为线程安全,否则实例内部的数据不是线程安全的。
#[macro_use]
use static_instance::{Instance, New};
use std::sync::{Arc, Mutex};
#[derive(Clone)]
struct SimpleCounter {
counter: Arc<Mutex<Box<i32>>>
}
impl SimpleCounter {
fn add(&mut self, value: i32) {
let mut data = self.count.lock().unwrap();
*data += 1;
}
fn get_value(&self) -> i32 {
let data: i32 = self.count.lock().unwrap();
return (*data).clone();
}
fn print(&self) {
let data: i32 = self.count.lock().unwrap();
println!("{}", *data);
}
}
impl New for SimpleCounter {
fn new() -> SimpleCounter {
SimpleCounter {
counter: Arc::new(Mutex::new(Box::new(0)))
}
}
CreateInstance!(SimpleCounter);
fn main() {
SimpleCounter::instance().add(30);
SimpleCounter::instance().print();
}