当I YAML::Load
具有本地标记的节点时,不保留标记类型和标记内容。
最小示例
我使用的是0.7.0版的conan软件包。
auto x = YAML::Node(42);
YAML::Emitter e;
e << YAML::LocalTag("x") << x;
std::string s = e.c_str();
auto y = YAML::Load(s);
std::cout << "before: " << s << std::endl;
std::cout << "tag: " << y.Tag() << std::endl;
std::cout << "after: " << YAML::Dump(y) << std::endl;
印刷品
before: !x 42
tag: !x
after: !<!x> 42
预期值:
before: !x 42
tag: x
after: !x 42
我想这里有两件事出了问题:
1.前导感叹号将添加到标记内容中
1.标记类型从_Tag::Type::PrimaryHandle
更改为_Tag::Type::Verbatim
所以我有两个问题:
1.这是一个bug还是我做错了?* 我不能100%确定我正确理解了复杂的yaml标签规范...*
1.是否有办法为现有节点设置_Tag::Type
作为解决方法?
**注意:**我已经将此问题作为Github issue发布。请原谅冗余。
1条答案
按热度按时间7uhlpewt1#
您的问题在于此代码:
主要的问题是默认的发射器总是产生逐字的标签,次要的问题是节点不记得标签样式。
要回答问题 * 这是否是一个错误 *:不。YAML规范不保证任何形式的往返。只要输出的语义是正确的,实现就可以以任何样式发出YAML。
若要回答是否有可能的解决方法的问题:不使用现有的发射器--正如你所看到的,没有可设置的选项来修改这个行为。我不完全确定API是否提供了足够的内部访问权限来轻松地适应现有的发射器。
在任何情况下,这将是太复杂的SO答案。