如何在 YAML-CPP 中将版本字符串写为文字(而非字符串)?

How can I write a version string as a literal (not string) in YAML-CPP?

我正在尝试编写以下信息:

hints:
  SoftwareRequirement:
    packages:
      ApplicationName:
        version: [ 1.7.3.nonRelease ]

我正在使用以下代码部分:

std::string m_exeName = # I get this from my CMakeLists file
std::string versionID = # I get this from my CMakeLists file

YAML::Node hints = config["hints"];
config["hints"]["SoftwareRequirement"]["packages"][m_exeName]["version"] = "[ " + versionID + " ]";

它让我得到以下信息:

hints:
  SoftwareRequirement:
    packages:
      ApplicationName:
        version: "[ 1.7.3.nonRelease ]"

有什么办法可以得到方括号内的引号或完全删除它们吗?这是为了符合 Common Workflow Language (CWL) 标准。

可能与this question有关。

编辑(添加答案的结果):

用这个:

config["hints"]["SoftwareRequirement"]["packages"][m_exeName]["version"][0] = versionID

结果:

hints:
  SoftwareRequirement:
    packages:
      ApplicationName:
        version: 
          - 1.7.3.nonRelease

With 是一个有效的 CWL。

[] 是序列的 YAML 语法;所以如果你想写

[ 1.7.3.nonRelease ]

那么您正在尝试编写一个包含单个元素的序列 1.7.3.nonRelease。当您告诉 yaml-cpp 写入字符串 [ 1.7.3.nonRelease ] 时,它会注意到如果它只是直接粘贴文本,它将被解释为列表,因此它引用该字符串以防止出现这种情况。

如果你真的想写一个只有一个元素的列表,那就这样写:

config["hints"]["SoftwareRequirement"]["packages"][m_exeName]["version"][0] = versionID;