У меня есть проект с несколькими файлами, которые все включают заголовок global.hpp
. Эти файлы хотят обмениваться и обновлять информацию, которая имеет отношение ко всей программе во время выполнения (эти данные собираются постепенно во время выполнения программы, но поля данных известны во время компиляции). Теперь моя идея заключалась в том, чтобы использовать такую структуру:
global.hpp
#include <string>
#ifndef _GLOBAL_SESSION_STRUCT
#define _GLOBAL_SESSION_STRUCT
struct session_struct {
std::string username;
std::string password;
std::string hostname;
unsigned short port;
// more data fields as needed
};
#endif
extern struct session_struct session;
main.cpp
#include "global.hpp"
struct session_struct session;
int main(int argc, char* argv[]) {
session.username = "user";
session.password = "secret";
session.hostname = "example.com";
session.port = 80;
// other stuff, etc
return 0;
}
Теперь каждый файл, включающий global.hpp
, может просто читать и записывать поля структуры session
и легко обмениваться информацией.
Это правильный способ сделать это?
ПРИМЕЧАНИЕ : Для этого конкретного проекта не используется многопоточность. Но, пожалуйста, (для будущих проектов и других людей, читающих) уточните в своем ответе, как это (или ваше предлагаемое) решение работает, когда есть нить. Кроме того, для этого примера / проекта переменные сеанса являются общими. Но это также должно относиться к любой другой форме общих переменных.