Когда программа запускается, она должна прочитать некоторые текстовые файлы (отредактированные пользователем) и перезаписать соответствующие глобальные переменные. Неотредактированные файлы должны сохранять значения по умолчанию.
Сейчас я делаю это, используя два отдельных файла: Settings.h и DefaultSettings.h
В Settings.h:
Код: Выделить всё
#pragma once
#include
namespace Settings {
extern int bits;
extern int k;
extern int nsym;
extern void apply_settings(std::string &name, std::string &value);
}
Код: Выделить всё
#pragma once
#include "Settings.h"
#include
namespace Settings {
int bits = 8;
int k = 20;
int nsym = 12;
// Called one by one by the file reader
void apply_settings(std::string &name, std::string &value) {
if (name == "bits") {
bits = atoi(value.c_str());
} else if (name == "k") {
k = atoi(value.c_str());
} else if (name == "nsym") {
nsym = atoi(value.c_str());
}
}
}
Код: Выделить всё
#pragma once
#include "Settings.h"
class RSCodec {
int bits, k, nsym;
public:
RSCodec();
virtual ~RSCodec();
};
Код: Выделить всё
#include "RSCodec.h"
RSCodec::RSCodec() {
bits = Settings::bits;
k = Settings::k;
nsym = Settings::nsym;
printf("BITS %d, K %d, NSYM %d\n", bits, k, nsym);
}
RSCodec::~RSCodec() {}
Некоторые другие классы вместо этого работают с обновленными значениями, но доступ к ним осуществляется в таким же образом (только разные пространства имен, например Settings::RF24::, Settings::DUAL_RF24:: и т. д.)
Минимальный пример:
Код: Выделить всё
#include
using namespace std;
#include "DefaultSettings.h"
#include "RSCodec.h"
int main() {
string k = "k";
string nsym = "nsym";
string val = "10";
Settings::apply_settings(k, val);
Settings::apply_settings(nsym, val);
RSCodec* rsc = new RSCodec();
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... iles-class
Мобильная версия