如何在 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;
我正在尝试编写以下信息:
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;