我开始使用yaml-cpp,我在解码文件的一部分时遇到了麻烦。我要解码的文件如下所示:
leds:
- [251, 252,253]
- [254, 250,220]
- [230, 231,230]
这是我试图实施的方式,但到目前为止还没有成功。
namespace YAML {
template<>
struct convert<Led_Yaml>
{
static Node encode(const Led_Yaml& led_data)
{
Node node;
node.push_back(led_data.r);
node.push_back(led_data.g);
node.push_back(led_data.b);
return node;
}
static bool decode(const Node& node, Led_Yaml& led_data)
{
led_data.r = node[0].as<int>();
led_data.g = node[1].as<int>();
led_data.b = node[2].as<int>();
return true;
}
};
}
void YAML_LedParser(std::string filename)
{
try
{
YAML::Node led_set = YAML::LoadFile(filename);
for(std::size_t i = 0; i< led_set.size();++i)
{
if(led_set["leds"])
{
std::cout<<"iteration\n";
led_collec = it->second.as<Led_Collection_Yaml>();
}
if(led_set.IsSequence())
{
//dummy = led_set[i].as<<Led_Yaml>();
led_collection.push_back(led_set[i].as<Led_Yaml>());
//std::cout<<"Got a Sequence!"<<"\n";
std::cout<<"r: "<<led_collection[i].r<<"\n";
}
}
//led_collec = led_set["leds"].as<Led_Collection>();
}
catch(YAML::ParserException& e)
{
std::cout << "Failed to load file: "<<e.what()<<"\n";
return;
}
}
我面临的问题是我不知道如何解析序列列表
答案 0 :(得分:0)
最简单的事情是,如果您知道这是YAML的结构,那么:
std::vector<Led_Yaml> leds = led_set["leds"].as<std::vector<Led_Yaml>>();
如果您确实想手动迭代序列:
for (auto element : led_set["leds"]) {
Led_Yaml led = element.as<Led_Yaml>();
// do something with led
}