會寫 Config Manager 是因為在開發演算法的過程中都有需多參數要不斷調試,避免 hard code 所以改為讀入一個外部檔案作為參數設定。方便頻繁的修改讀寫影像路徑、演算法參數等。
其中又以處理不同變數的讀寫最為繁瑣,因此寫了一個簡單的 sample,利用 marco programming 和 function overload 的特性,再加上一點點的 template,大大簡化了讀寫參數的複雜度,並且維持程式碼的乾淨。把最骯髒的地方用更骯髒的方式隱藏起來XD
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);
