在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