利用巨集簡化配置檔案讀寫的類

2021-04-25 12:40:27 字數 2643 閱讀 9868

利用巨集簡化配置檔案讀寫的類

應用程式程式設計過程中一般免不了需要讀寫配置檔案。一般的做法是編寫乙個配置讀寫類。

比如需要讀取和儲存伺服器的繫結位址和埠的配置

大致形式如下:

#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...