如何使锈结构只能构造一次而不会产生不安全的锈

问题描述

我想创建一个结构,该结构的构造函数只能被调用一次。例如:

pub struct Example;
impl Example {
    pub fn new() -> Self {
         // Do stuff
    }
}

fn main() {
    Example::new() // This should work fine
    Example::new() // This should panic
}

到目前为止,我唯一想到的方法是使用static mut: bool并使构造函数不安全:

static mut CONSTRUCTED: bool = false;
pub struct Example;
impl Example {
    pub unsafe fn new() {
        if CONSTRUCTED {
            panic!("You many only construct Example once");
        }
        else {
            CONSTRUCTED = true;
        }
    }
}

虽然这很好,但我想找到一种不使用不安全生锈的解决方案,或者至少不强制某人使用Example结构使用不安全生锈的解决方案。也许可以使用FnOnce特性来完成?

重申一下,我的问题是:我可以在仅能被调用一次的安全锈中创建一个公共函数吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)