會寫 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);