Ich muss einige Variablen zwischen verschiedenen Quelldateien teilen. Jetzt benutze ich namespace
wie unten, was ein wenig seltsam erscheint. Hinzufügen von const
kann besser sein, aber die globalen Variablen werden zugeordnet durch Laden von configure-Datei zusammen nicht eins für eine Zeit. Daher kann die initializer_list nicht verwendet werden. Gibt es dafür eine bessere Lösung?Wie können globale Variablen in einem Projekt freigegeben werden, wenn sie aus Konfigurationsdateien initialisiert werden müssen?
// configuration.hpp
#include <string>
namespace configuration {
extern int ni;
extern int nk;
extern int nt;
extern double dt;
extern std::string grid_config_file;
extern std::string media_config_file;
extern std::string source_config_file;
void SetConfiguration(const std::string &);
};
// configuration.cc
#include "configuration.hpp"
#include <string>
#include <yaml-cpp/yaml.h>
namespace configuration {
int ni;
int nk;
int nt;
double dt;
std::string grid_config_file;
std::string media_config_file;
std::string source_config_file;
void SetConfiguration(const std::string &main_config) {
YAML::Node config = YAML::LoadFile(main_config);
YAML::Node conf_basic = config["conf_basic"];
ni = conf_basic["ni"].as<int>();
nk = conf_basic["nk"].as<int>();
nt = conf_basic["nt"].as<int>();
dt = conf_basic["dt"].as<double>();
YAML::Node conf_file = config["conf_file"];
grid_config_file = conf_file["grid_conf"].as<std::string>();
media_config_file = conf_file["media_conf"].as<std::string>();
source_config_file = conf_file["source_conf"].as<std::string>();
}
}
Die configure-Datei (conf.yaml)
---
# The basic parameters
conf_basic:
ni: 100
nk: 100
nt: 200
dt: 0.1
# The detailed configure files
conf_file:
grid_conf: Grid.yaml
media_conf: Media.yaml
source_conf: Source.yaml
Wenn Sie Accessoren anstelle von Variablen verwenden, können Sie den Zugriff auf die Daten steuern. – dgsomerton