一直用c++操作ini做配置檔案,想換成yaml,在全球最大的同**友**github上搜尋,看有沒有開源的庫,功夫不負有心人,找到了yaml-cpp,試著解析了乙個yaml檔案,給個滿分。分享一下如何使用他。
先git clone [email protected]:jbeder/yaml-cpp.git下,進行build四件套,把他編譯成靜態庫
mkdir build
cd build
cmake …
make
執行完後,會得到libyaml-cpp.a。
新建乙個專案,結構大致如下
yaml_demo
|__ include
|yaml-cpp 頭資料夾
|lib
|yaml-cpp 庫資料夾
|main.cpp
把頭檔案和庫拷貝到相應的資料夾內。
配置cmakelists.txt把頭檔案和靜態庫加到專案裡,這樣在編譯和鏈結時才能通過
project(yaml_demo)
set(executable_output_path katex parse error: expected 'eof', got '#' at position 27: …nary_dir}/bin) #̲ 二進位制檔案的輸出目錄 lin…/lib/yaml-cpp)
add_executable(pro
ject
name
main
.cpp
)tar
geti
nclu
dedi
rect
orie
s(
main.cpp) target_include_directories(
projec
tna
mema
in.c
pp)t
arge
tin
clud
edi
rect
orie
s(public pro
ject
sour
cedi
r/in
clud
e)ta
rget
link
libr
arie
s(
/include) target_link_libraries(
projec
tso
urce
dir
/inc
lude
)tar
getl
ink
lib
rari
es( yaml-cpp.a)
對yaml-cpp的配置就完成了。看一下我的config檔案
template
struct convert;
在進行轉換的時候他會判斷有沒有實現 decode方法
struct as_if
const node& node;
t operator()() const
};node是yaml-cpp的核心,我們的配置的所有操作都從這個類中進行。
我們只要具體化自定義的struct就可以使用了
static bool decode(const node &node, label &rhs)
};
}
encode方法是把我們自定義的struct轉換成yaml-cpp的node,
轉換時可以這樣
struct container ;
namespace yaml
static bool decode(const node &node, container &rhs)
};
}
完整**如下:
#include
#include
#include
#include
struct container ;
namespace yaml
static bool decode(const node &node, container &rhs)
};
static bool decode(const node &node, label &rhs)
};
int main(int argc, char **ar**)
if (config["containers"])
}return 0;
一百三十二
一 前言 在我的這個系列文章中,選擇 見識會始終貫穿整個所有文章,因為這個是我近十年職業生涯最深的感受,在正確的方向上努力,才能實現更大的價值。畢業是個殘忍的季節,成熟不成熟的都要一同收割,經過大學四年的學習,我們終於畢業了,就這樣懷揣者夢想再次出發了,腦海裡依舊閃現著老師的尊尊教導,你們畢業了,但...
春節十二響 十二省聯考2019
給定一顆樹,要求將其上的節點分成若干組,使得每一組的節點互相不擁有祖先 後代關係。定義每一組的值為該組節點權值最大值,求值總和最小值。硬上不是很顯然的貪心,但是資料中鏈的情況給了提示。考慮鏈的情況 對於根節點兩側的鏈,我們分別排序,然後覆蓋選取即可。這個貪心的正確性是顯然的。現在考慮完整的資料 對於...
十二省聯考2019 春節十二響
點這裡看題目。感覺自己好蠢 假如我們有兩棵樹 t 1,t 2 我們應該怎麼計算出它們合併之後的最優解呢?設最優情況下,t 1 的所有記憶體段的集合為 m 1 t 2 的集合為 m 2 我們可以知道,m 1,m 2 中所有的元素都是不能再合併的 廢話 考慮有 m 1,m 2 in m 1,m 1 m ...