问题标签 [yaml-cpp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1552 浏览

yaml-cpp - 无需在 YAML-cpp 中迭代即可获取密钥

有没有一种简单的方法可以在不迭代的情况下使用 YAML-cpp 获取地图中的密钥?我在说明中看到我可以使用first()YAML-cpp 迭代器类的方法,但我不需要实际迭代。我有一个可以通过缩进级别识别的键,但是如果该键不是已知列表之一,我现在需要做的是抛出异常。我的代码目前如下所示:

看,我需要密钥字符串才能继续解析,因为 otherThing 在 YAML 文件中的 goodKey 下。这很好用,但我想告诉用户无法识别的密钥是什么。不过,我不知道如何访问它。我在头文件中看不到任何赋予我该值的函数。我如何得到它?

0 投票
2 回答
724 浏览

yaml-cpp - 尝试构建库时出现 yaml-cpp 编译器错误

我正在尝试使用 Visual Studio Express 2012(使用 Cmake 生成的项目文件)编译yaml-cpp 0.5,但我从 impl.h 中收到了一些错误:

所有错误都来自模板函数node_data::equalsnode_data::convert_to_node

请注意,这些错误来自run-tests项目文件;我实际上能够构建 lib 文件,但不能使用该库,因为它需要这些功能才能工作。

有任何想法吗?

编辑:使用 VS 2010 编译时,我也会遇到同样的错误。

0 投票
2 回答
932 浏览

yaml-cpp - 如何为特定的 yaml-cpp 节点设置发射样式

我正在发出一个 YAML 文档,如下所示:

在节点层次结构的某个地方,我有一个特定的序列,我想在Flow样式中发出,而其他一切都应该使用默认样式设置。

除了手动发射每个节点并注意我感兴趣的节点之外,我似乎找不到任何方法。这似乎是为相对简单的事情付出高昂的代价。

理想情况下,我希望能够标记Node“如果你被发射,请使用以下样式”。但我认为没有任何支持。

谁能想到不得不手动发出整个文档的方法?

非常感谢。

0 投票
1 回答
2123 浏览

compilation - http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument 上的完整示例 Yaml 程序无法编译

在 Linux 库上使用 G++ 4.6.2 是根据说明构建的。测试目录中的 run_tests 工作正常。

setenv YAML_HOME /nfs/site/proj/dt/ltt_test_15/work_area/ironchef/new_version/ironchef/trunk/yaml/yaml-cpp-0.5.0

ls $YAML_HOME 总计 640 16 CMakeCache.txt 0 build/ 0 libyaml-cpp.so.0.5@ 8 test/ 8 CMakeFiles/ 8 cmake_install.cmake 480 libyaml-cpp.so.0.5.0* 8 util/ 16 CMakeLists.txt 0 include/ 8 license.txt 8 yaml-cpp.pc 8 CTestTestfile.cmake 8 install.txt 8 matt_sandbox/ 8 yaml-cpp.pc.cmake 40 Makefile 0 libyaml-cpp.so@ 8 src/

cd matt_sandbox g++ -o test_yaml -g -I/usr/intel/pkgs/boost/1.48.0-gcc-4.6.2/include -I$YAML_HOME/include -I$YAML_HOME/include/yaml-cpp -I$YAML_HOME /include/yaml-cpp/node -I$YAML_HOME/include/yaml-cpp/node/detail -I$YAML_HOME/include/yaml-cpp/contrib main.cpp

编译器错误:main.cpp:在函数 `void operator>>(const YAML::Node&, Vec3&)' 中:main.cpp:25:错误:'YAML::Node::operator 中的 'operator>>' 不匹配[](const Key&) const [with ... 类似错误 .... main.cpp:51: error: 'class YAML::Parser' has no member named 'GetNextDocument'

从http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument上的完整示例复制并粘贴代码

0 投票
1 回答
717 浏览

yaml-cpp - 如何使用复杂的密钥访问 yaml

文件 test.yaml .....

我可以使用什么命令通过 yaml-cpp 访问其中之一。我可以访问整个地图,但不能访问单个元素。

这是我正在尝试的:

这是我的结果:

如果这在 yaml-cpp 中还不可能,我也想知道。

0 投票
1 回答
595 浏览

c++ - 为什么要插入一个?(问号)就在地图条目之前?

Yaml-cpp 似乎在我的地图条目之前插入了一个问号。这是结果:

如您所见,从超子开始,有一个问号。我尝试添加更多条目以查看会发生什么。它似乎在?和之间交替:。这很奇怪。

我尝试删除核子键和超子键的所有内容,我仍然得到这个

嗯。确实很奇怪。这是我的代码。原谅凌乱

在旁注中,我正在缩进以减少混乱。所以也原谅。

另外,我的 YAML 结构好吗?还是我应该修改一些不同的东西?谢谢。

0 投票
1 回答
1224 浏览

yaml-cpp - 为新的 yaml-cpp API 定义自定义输入类型

我正在尝试使用新型 YamlCpp API 定义一些自定义输入类型。我有两个问题。首先让我说,我们目前使用的是 0.3 style-api,一切都很好。新 API 的代码外观提高了大约 10 倍,因此我们希望使用它。

  1. 为什么我当前的方法会使编译器失效?
  2. yaml-cpp 是否足够智能以处理嵌套模板。例如,如果我的解析器知道如何 enc/dec std::vectors,然后我为 MyAwesomeType 单独定义一个自定义处理程序——我可以要求它 enc/dec astd::vector<MyAwesomeType>并且它会弄清楚吗?

我的代码首先复制并粘贴网站上的示例(此处),然后对其进行修改。我当前的实现尝试处理std::vector<std::pair<qint16,qint16>>- 这不会编译的转换。(仅供参考 - qint16 只是 __int16 的跨平台 typedef)

最后,我想再用这个来调用

...基于看起来像这样的输入 yaml...

这里的编译器错误输出大约是 300 行,所以我不会在这里发布。平台:Visual Studio 2010 SP1 x64

谢谢你的帮助。

编辑: 这是我得到的许多错误中的第一个,即用新样式解析 Node 键似乎并不开心......我添加这个是因为导致这可能与其他错误有关。
代码

原因

请注意,上面错误中提到的第 75 行是

我使用默认分支的 Rev 573 从最新源代码重新编译的行,所有这些示例都来自该代码。

0 投票
1 回答
468 浏览

c++ - 如何使用 yaml-cpp 0.5.0 API 从列表中删除元素

以下测试代码不会按预期从列表中删除元素:

测试输出文件包含:

该文件似乎包含原始列表中的值,并且该元素未被删除。从列表中删除元素的正确方法是什么?

0 投票
2 回答
235 浏览

c++ - 通过引用遍历节点的惯用方式

从一个字符串开始,该字符串表示我要从中检索数据的节点的路径,例如“abc”。目前,我用来横穿节点层次结构以到达该节点的代码看起来像这样(可能无法编译,但你明白了):

上面的代码似乎可以正常工作,但我想知道是否有更好的方法来进行节点横向分配。使用直接节点分配 ( currNode = currNode[key]),而不是 () 的指针/地址currNode = &((*currNode)[key]),似乎最终会在节点之间创建引用,而不是从一个节点遍历到下一个节点。

是否有“更清洁”或更惯用的方法来实现这一目标?

0 投票
1 回答
1737 浏览

yaml-cpp - 如何设置 yaml-cpp 节点样式?

我有一个vector3类。

结果是

我希望结果是:

如果使用旧的 API,我可以YAML::Flow用来设置样式:

使用新的 API,如何设置样式?

我在 yaml-cpp 项目问题页面上问了这个问题:

https://code.google.com/p/yaml-cpp/issues/detail?id=186

我得到了答案:

您仍然可以使用发射器并设置流样式:

但这vector3是对象的一部分。我专门化YAML::convert<>模板类

所以我需要返回一个节点,但发射器无法转换为节点。

我需要对象喜欢这样:

我怎样才能做到这一点?