在MFC中使用Visual Studio C++。我试图找出什么是存储应用程序/程序设置的好方法。我并不是指它们的持久存储,而是指代码中用于保存设置的数据结构。应用程序/程序设置的C++类?
我创建了一个名为Settings的静态类,它有几个静态方法和嵌套类来分区设置。例如:
Settings::General::GetHomePage();
现在我进入单元测试,我开始认识到静态类是不可取的:
class Settings
{
public:
Settings(void);
~Settings(void);
static void SetConfigFile(const char * path);
static CString GetConfigFilePath();
static void Load();
static void Save();
class General
{
public:
static CString GetHomePage();
static void SetHomePage(const char * url);
private:
static int homePageUrl_;
};
private:
static CString configFilePath_;
};
然后我可以在我的代码,就像访问我的设置。所以我想把它变成一个基于实例的类。但是我必须管理嵌套的类实例,这些实例虽然很简单,但对于测试来说似乎仍然有点麻烦。嵌套类的全部意图仅仅是将设置分组为逻辑组。我在辩论一个基于字符串的设置类是否会更好,比如settings-> get(“General.HomePage”),尽管我认为我更喜欢专用存取方法的强类型。
所以为了解决我的问题什么是一个好的数据结构来保存支持直接单元测试的程序配置/设置?
在C++中恕我直言,使用'typedef enum bla {} foo'确实没有意义。声明变量时,不需要编写'enum bla varname'。 'bla varname'就够了。 – RedX 2011-06-17 07:51:40
@RedX:在这个玩具的例子中,我同意。然而,通常情况下,随着代码的发展,你会发现你的模板参数并不适合你的需求。将SettingCollection :: mapped_type或SettingCollection :: key_type引用为类型会更容易,因此如果在复杂的代码段中更改模板参数,则只能在一个点上更改类型。如果您在本身是模板的类中使用了模板类型,这也很有效。它还显示了该类型的用途,因为它在整个代码中都被明确地用于地图中。 – Nathan 2011-06-17 17:43:23