在 C++ 和 Perl 之间使用 YAML

Posted

技术标签:

【中文标题】在 C++ 和 Perl 之间使用 YAML【英文标题】:YAML to be used between C++ and Perl 【发布时间】:2011-12-15 00:02:39 【问题描述】:

我正在尝试使用 C++ 解析来自 Perl 的 YAML::Tiny 的 YAML 文件输出。作为一个 C++ & YAML 新手,我以HowToParseADocument 为起点。

monsters.yaml 文件,如果使用 YAML::Tiny 创建,看起来像:

---
name: Ogre
position: [0, 5, 0]
powers:
  - name: Club
    damage: 10
  - name: Fist
    damage: 8
---
name: Dragon
position: [1, 0, 10]
powers:
  - name: Fire Breath
    damage: 25
  - name: Claws
    damage: 15
---
name: Wizard
position: [5, -3, 0]
powers:
  - name: Acid Rain
    damage: 50
  - name: Staff
    damage: 3

我正在寻求帮助,将HowToParseADocument 的示例变形以读取修改后的 YAML 文件,并以 --- 作为每个条目的分隔符。我重新复制了下面的 C++ 主代码。

int main()

   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   parser.GetNextDocument(doc);
   for(unsigned i=0;i<doc.size();i++) 
      Monster monster;
      doc[i] >> monster;
      std::cout << monster.name << "\n";
   

   return 0;

【问题讨论】:

【参考方案1】:

分隔符--- 将 YAML 文件拆分为多个文档(与示例中由序列组成的单个文档相反)。

你可以这样解析:

int main()

   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   while(parser.GetNextDocument(doc)) 
      Monster monster;
      doc >> monster;
      std::cout << monster.name << "\n";
   

   return 0;

【讨论】:

以上是关于在 C++ 和 Perl 之间使用 YAML的主要内容,如果未能解决你的问题,请参考以下文章

配置文件语言之yaml

想要使用 c++ 或 perl 使用 OpenSSH 和 SFTP 通过 Internet 发送文件---Windows Vista 两者

如何使用 swig 将 const 字符串参数从 perl 传递到 c++

在 C++ 中解析 YAML 字典列表

c++ 中的 yaml.cpp 库有问题

C++ 中的 Yaml 发射器