Как хранить данные в течение жизни общей библиотеки - PullRequest
0 голосов
/ 12 сентября 2018

Я пишу разделяемую библиотеку на C ++, которая будет вызываться через JNI. У меня есть класс, который получает сообщения от Java и перенаправляет на соответствующий объект. Давайте назовем это Dispatcher. Существует DataStore, который должен существовать в течение всей жизни программы. На самом деле некоторые данные должны быть доступны между JNI вызовами.

Мой текущий набросок состоит из двух классов в виде синглетонов. DataStore выглядит так:

class DataStore {
    // constructors, get_instance() etc. are skipped
    int _read_only_variable{};
public:
    DataStore (int param) : _read_only_variable(param) {}
    // or
    void set_data(int param) {
        _read_only_variable = param
    }
};

Как я могу гарантировать, что только объект Dispatcher может создать объект DataStore или только Dispatcher может вызвать set_data?

С другой стороны, если я гарантирую, что _read_only_variable действительно записан только в конструкторе, что обеспечит существование только одного экземпляра.

Я также хочу соответствовать принципу SOLID, поэтому я бы избегал вложенных классов.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете гарантировать, что только Dispatcher вызовет эти методы, сделав их закрытыми, а затем сделав Dispatcher a friend.

PS a _read_only_variable будет const в C ++.Компилятор будет громко жаловаться на то, что вы попытаетесь изменить его.Но это только гарантирует, что есть один _read_only_variable на хранилище данных , что довольно тривиально, а не то, что вы хотели.

...