在 Rust / 当多个实例必须访问同一个对象时模拟结构静态字段行为

Simulating struct static field behaviour in Rust / when multiple instances have to access same object

我有一个想在 Rust 中解决的问题,可以通过在结构中简单地使用静态字段来解决,但 Rust 不允许这样做。

假设我想要有多个套接字,所以我定义了一个名为 Socket:

的结构

1
2
3
pub struct Socket {

}

但每个套接字将使用相同的 Wire 来发送数据包。在 C 中,我会有这样的东西:

1
2
3
struct Socket {
    static Wire wire;
}

并且每个套接字都可以共享相同的 Wire

显而易见的解决方案是将相同的 Wire 传递给构造函数中的每个新 Socket

1
2
3
4
5
pub struct Socket {
    pub fn new(wire: SomeSharedRefType) {
    //...
    }
}

但我不想这样做是有特殊原因的。我想从 C 创建新的 Rust Socket 对象。虽然可以从 C 创建唯一的 Rust Wire 并将其传递给 Socket::new 的每个 C 调用,但我想避免这种情况,因为它不安全,我希望 Rust 能够管理几乎所有事物的生命周期。我不想让 C 承担这个责任。

如果你认为我试图解决一个不必要的问题,请告诉我什么是好的解决方案,同时告诉我是否可以通过某种技术在 Rust 上模拟一个静态字段,因为我想学。


I want to create new Rust Socket objects from C++. While it's possible to create the unique Rust Wire from C++ and pass it to every C++ call of Socket::new, I want to avoid that because it's unsafe and I want to Rust to be able to manage the lifetime of almost everything. I don't want C++ to take this responsibility.

我不确定它有什么不同。 C 端必须调用某种套接字创建工厂,为什么它不能传递不透明的线,可能与其他参数一起传递?

also tell me if it's possible to simulate a static field on Rust by some technique, because I want to learn.

静态变量。静态成员存储在类中,Rust 没有类来存储它们,所以它没有静态成员。