https://github.com/jbeder/yaml-cpp/wiki/Tutorial
典型的加载YAML文件的例子:
YAML::Node config = YAML::LoadFile("config.yaml"); //执行文件同级目录
if (config["lastLogin"]) //如果文件节点有成员节点lastLogin
{
//获取并打印文件节点的成员节点lastLogin,转化为数据结构DateTime
std::cout << "Last logged in: " << config["lastLogin"].as<DateTime>() << "\n";
}
const std::string username = config["username"].as<std::string>();
const std::string password = config["password"].as<std::string>(); login(username, password);
config["lastLogin"] = getCurrentDateTime();
std::ofstream fout("config.yaml"); fout << config;
基本解析和节点编辑
在文件YAML里面所有信息以节点形式表示。可以检查节点的类型如:YAML::NodeType::Sequence/Null/Scalar/Map/Undefined
集合节点(Sequence组或map结构)与STL的vector和map结构用法一致
Sequence的用法如下
YAML::Node primes = YAML::Load("[2, 3, 5, 7, 11]");
for (std::size_t i=0;i<primes.size();i++)
{
std::cout << primes[i].as<int>() << "\n";
} // or:
for (YAML::const_iterator it=primes.begin();it!=primes.end();++it)
{ std::cout << it->as<int>() << "\n"; }
primes.push_back(13);
assert(primes.size() == 6);
Map的用法如下:
YAML::Node lineup = YAML::Load("{1B: Prince Fielder, 2B: Rickie Weeks, LF: Ryan Braun}");
for(YAML::const_iterator it=lineup.begin();it!=lineup.end();++it)
{ std::cout << "Playing at " << it->first.as<std::string>() << " is " << it->second.as<std::string>() << "\n"; }
lineup["RF"] = "Corey Hart";
lineup["C"] = "Jonathan Lucroy";