#instance #static #global

static-instance

创建对象的可变静态实例

2个版本

0.1.1 2020年10月9日
0.1.0 2020年10月8日

#70 in #global

MIT 许可证

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();

}

无运行时依赖