利用巨集簡化配置檔案讀寫的類
應用程式程式設計過程中一般免不了需要讀寫配置檔案。一般的做法是編寫乙個配置讀寫類。
比如需要讀取和儲存伺服器的繫結位址和埠的配置
大致形式如下:
#define sectionserver "server"
#define keyport "port"
#define keyaddress "address"
int getserveport()
return getprivateprofileint(sectionserver , keyport, 80, m_strconfigfilename);
int getserveraddress();
int setserverport(const int nport);
int setserveraddress(const char* pszaddr)
從上面看出,步驟一般如下:
1、為了方便的不寫錯段名和鍵名,一般會定義一批巨集,代表段名和鍵名
2、寫出get***
3、寫出set***
有多個配置不斷重複上面3個步驟,在配置多的情況下面,**一大堆,寫得很煩人。
如果我們能充分利用c++的巨集、#和##的妙處,則可以把**寫得非常簡單。
改造過的**類似如下
;通過乙個巨集,無需對段名和鍵名進行定義,同時生成了get***和set***的函式,同時還支援定義預設值。下面的全部**。
#pragma once
////
//created by dengzhenbo
//date: 2009-3-12
////
#include
#include
#define getconfigvalueint getprivateprofileinta
#define getconfigvaluestring getprivateprofilestringa
#define setconfigvaluestring writeprivateprofilestringa
#define define_int_config(section, key, default) /
int get##section##key() /
; /
int set##section##key(int nvalue) /
;#define define_string_config(section, key, default) /
std::string get##section##key() /
; /std::string strreturn; /
getconfigvaluestring(#section, #key, default, szvalue, sizeof(szvalue), m_strfilename.c_str()); /
strreturn = szvalue; /
return strreturn; /
}; /
int set##section##key(char* szvalue) /
;class cconfigbase
;cconfigbase(const char* pszfilepath)
;~cconfigbase(void){};
void setconfigfilepath(const char* pszfilepath)
int getconfigint(const char* pszsection, const char* pszkey, int ndefaule)
;int setconfigint(const char* pszsection, const char* pszkey, int nvalue)
;std::string getconfigstring(const char* pszsection, const char* pszkey, const char* pszdefaule) //string value max length = 512
;std::string strreturn;
getconfigvaluestring(pszsection, pszkey, pszdefaule, szvalue, sizeof(szvalue), m_strfilename.c_str());
strreturn = szvalue;
return strreturn;
};int setconfigstring(const char* pszsection, const char* pszkey, const char* pszvalue)
; protected:
std::string m_strfilename;
};使用的時候可以這樣
define_int_config(server, port, 1);
define_string_config(server, address, "127.0.0.1");
};上面**展開巨集後,會自動生成getserverport、setserverport、getserveraddress和setserveraddress函式,可以直接呼叫這4個函式。
呵呵,簡單吧!!!
利用protobuf進行讀寫配置檔案
1 編寫protobuf 的proto檔案 在程式中經常會用配置檔案,而利用protobuf可以很方便的進行配置檔案的讀寫。先編寫好protobuf的proto檔案 syntax proto3 package msgtype enum enumtest message prototestsub me...
讀寫配置檔案
windows作業系統專門為此提供了6個api函式來對配置設定檔案進行讀 寫 getprivateprofileint 從私有初始化檔案獲取整型數值 getprivateprofilestring 從私有初始化檔案獲取字串型值 getprofileint 從win.ini 獲取整數值 getprof...
讀寫配置檔案
procedure curstepchanged curstep tsetupstep varsetupname string inipath string begin case curstep of ssinstall 複製檔案前 begin end sspostinstall 完成複製 begi...