Имитация поведения поля struct stati c в Rust / когда несколько экземпляров должны обращаться к одному и тому же объекту - PullRequest
0 голосов
/ 19 июня 2020

У меня есть проблема, которую я хочу решить в Rust, которую можно решить простым использованием полей stati c в структуре, но Rust не допускает этого.

Предположим, я хочу иметь несколько сокетов , поэтому я определяю структуру с именем Socket:

pub struct Socket {

}

, но каждый сокет будет использовать один и тот же Wire для отправки пакетов. В C ++ у меня было бы что-то вроде этого:

struct Socket {
    static Wire wire;
}

, и просто каждый сокет может использовать один и тот же Wire.

Очевидным решением было бы передать одно и то же Wire каждому новому Socket в конструкторе:

pub struct Socket {
    pub fn new(wire: SomeSharedRefType) {
    //...
    }
}

, но есть особая причина, по которой я не хочу этого делать . Я хочу создать новые объекты Rust Socket из C ++. Хотя можно создать уникальный Rust Wire из C ++ и передать его каждому вызову C ++ из Socket::new, я хочу избежать этого, потому что это небезопасно, и я хочу, чтобы Rust мог управлять временем жизни почти всего. Я не хочу, чтобы С ++ взял на себя эту ответственность. stati c в Rust с помощью какой-то техники, потому что я хочу изучить.

1 Ответ

1 голос
/ 19 июня 2020

Я хочу создать новые объекты Rust Socket из C ++. Хотя можно создать уникальный Rust Wire из C ++ и передать его каждому вызову C ++ Socket :: new, я хочу избежать этого, потому что это небезопасно, и я хочу, чтобы Rust мог управлять временем жизни почти всего. Я не хочу, чтобы C ++ взял на себя эту ответственность.

Я не уверен, какая разница. Сторона C ++ должна вызвать какую-то фабрику создания сокетов, почему она не может передать непрозрачный провод, возможно, вместе с другими параметрами?

также скажите мне, можно ли смоделировать состояние * Поле 1012 * в Rust с помощью какой-то техники, потому что я хочу изучить.

Stati c переменные. Члены Stati c хранятся в классе, Rust не имеет классов для их хранения, поэтому у него нет членов stati c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...