C++ Config Manager

會寫 Config Manager 是因為在開發演算法的過程中都有需多參數要不斷調試,避免 hard code 所以改為讀入一個外部檔案作為參數設定。方便頻繁的修改讀寫影像路徑、演算法參數等。

其中又以處理不同變數的讀寫最為繁瑣,因此寫了一個簡單的 sample,利用 marco programming 和 function overload 的特性,再加上一點點的 template,大大簡化了讀寫參數的複雜度,並且維持程式碼的乾淨。把最骯髒的地方用更骯髒的方式隱藏起來XD

ConfigManager

Template Project with ConfigMaker

利用 function overload 來自動導入不同變數型態,對應不同型態的變數處理方式在編譯階段就已經完成,執行上是高效率的,需要手動增加的部分只有類似下面的 macro。讓我們可以更專注在控管 variable name 上,如果再使用 clang 來 parse config 自動產生 macro 就可以做到全自動了,讓這個工具作為提升開發效率的第一步吧,我們只要專注撰寫 config.cpp 就足夠了

只要定義了如下的 config.cpp

#include "config.h"

int    CFG_0[5]   = {0, -1, 2, 3, 4};
int    CFG_1      = -50;
float  CFG_2[2]   = {5.3, -6.3};
float  CFG_3      = 5.5;
double CFG_4[2]   = {-4.2, 2.3};
double CFG_5      = 7.8;
char   CFG_6[16]  = "D:\\workspace\\";
bool   CFG_7      = true;
bool   CFG_8[3]   = {true, false ,true};
string CFG_9      = "test string";

再寫入這些 macro 就可以輕鬆讀入設定

#define CFG_READ_MACRO \
CFG_READ(CFG_0); \
CFG_READ(CFG_1); \
CFG_READ(CFG_2); \
CFG_READ(CFG_3); \
CFG_READ(CFG_4); \
CFG_READ(CFG_5); \
CFG_READ(CFG_6); \
CFG_READ(CFG_7); \
CFG_READ(CFG_8); \
CFG_READ(CFG_9);