Yaml-cpp は、マップ エントリの直前に疑問符を挿入しているようです。結果は次のとおりです。
baryons:
nucleons:
- proton:
quarkContent: [u, u, d]
charge: 1
- antiproton:
quarkContent: [au, au, ad]
charge: -1
- neutron:
quarkContent: [d, d, u]
charge: 0
- antineutron:
quarkContent: [ad, ad, au]
charge: 0
? hyperons:
- lambda:
quarkContent: [u, d, s]
charge: 0
- antilambda:
quarkContent: [au, ad, as]
charge: 0
ご覧のとおり、ハイペロンから始まり、疑問符があります。何が起こるかを確認するために、さらにエントリを追加してみました。と を交互に繰り返すよう?
です:
。これはかなり奇妙です。
Nucleons キーと Hyperons キーのすべての内容を削除しようとしましたが、まだこれが表示されます
baryons:
nucleons:
- Hello
? hyperons:
- Hello
うーん。本当に奇妙です。これが私のコードです。乱雑さを許して
#include "yaml-cpp/yaml.h"
#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <typeinfo>
using namespace YAML;
void addParticle(Emitter * e, std::string name, std::string qc1, std::string qc2, std::string qc3, int charge){
*e << BeginMap << Key << name;
*e << Value;
*e << BeginMap;
*e << Key << "quarkContent" << Value << Flow << BeginSeq << qc1 << qc2 << qc3 << EndSeq;
*e << Key << "charge" << Value << charge;
*e << EndMap;
*e << EndMap;
*e << BeginMap << Key << "anti" + name;
*e << Value;
*e << BeginMap;
*e << Key << "quarkContent" << Value << Flow << BeginSeq << "a" + qc1 << "a" + qc2 << "a" + qc3 << EndSeq;
*e << Key << "charge" << Value << charge * -1;
*e << EndMap;
*e << EndMap;
};
int main(){
Emitter e;
e << BeginMap;
e << Key << "baryons";
e << Value;
e << BeginMap;
e << Key << "nucleons";
e << Value;
e << BeginSeq;
addParticle(&e, "proton", "u", "u", "d", 1);
addParticle(&e, "neutron", "d", "d", "u", 0);
e << EndSeq;
e << EndMap;
e << BeginMap;
e << Key << "hyperons";
e << Value;
e << BeginSeq;
addParticle(&e, "lambda", "u", "d", "s", 0);
e << EndSeq;
e << EndMap;
e << EndMap;
std::ofstream particlesYAML;
particlesYAML.open("particles.yml");
particlesYAML.write(e.c_str(), strlen(e.c_str()));
particlesYAML.close();
return 0;
};
余談ですが、煩雑さを減らすためにインデントしています。だからそれも許して。
また、私の YAML 構造は適切ですか? それとも別のものに修正する必要がありますか?ありがとう。