关于你的程序的大小和目的(我从你的描述中理解)这可能并不重要,但由于它具有教育背景,我建议“做对”。
在这种情况下,我会选择一个 Config 结构(或类,如果你想让它更聪明一点,请参见下文),它带有配置值,可以在你的程序中随意使用。它的优点是,如果您必须从文件或命令行中获取选项,您可以轻松更改它。
至于 class 与 struct thingy(请注意,我在这里进行逻辑区分,而不是技术区分)。要么将所有值作为成员放入 struct 并传递它的 const refs,要么将其设为一个完整的类,其中包含隐藏数据来自何处(以及如何生成)的访问器。编程始终是决策,这是您的决定。如果您认为将来必须允许更多的配置可能性(如上所述),您可能需要进行类抽象。
另一种选择是将数据分散到整个程序中,这实际上比听起来要聪明得多。如果每个类都只知道它的配置选项(并隐藏它们),那么您实际上可以使用您正在使用的 OOP 语言。示例:
// footype.h
class FooType {
private:
static const int fooOption;
};
// bartype.h
class BarType {
private:
static const float barOption;
};
问题是,如何初始化它。一种方法是创建一个如下所示的config.cpp:
#include "footype.h"
#include "bartype.h"
const int FooType::fooOption = 42;
const float BarType::barOption = 7.4;
因此,您可以隐藏信息,并且您仍然可以将所有配置选项集中在一个位置 (config.cpp)。
编辑:
如果您有许多(多个)不同模块所需的配置选项,您可以像这样进行一些复杂性(间接):
// footype.h
class FooType {
private:
static const int& fooOption;
static const bool& dumpLevel;
};
// bartype.h
class BarType {
private:
static const float& barOption;
static const bool& dumpLevel;
};
config.cpp:
#include "footype.h"
#include "bartype.h"
static const int opt_foo = 42;
static const float opt_bar = 7.4;
static const bool opt_dumpLevel = false;
const int& FooType::fooOption = opt_foo;
const bool& FooType::dumpLevel = opt_dumpLevel;
const float& BarType::barOption = opt_bar;
const bool& BarType::dumpLevel = opt_dumpLevel;
如果需要,您甚至可以将选项设置为非 const(但我没有看到可变的 配置选项 中的意义)。