Как я могу написать строку версии как литерал (не строку) в 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).

Возможно, связано с этот вопрос.

РЕДАКТИРОВАТЬ (добавлены результаты из ответа):

Пошел с этим:

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

Результат:

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

With является действительным CWL.


person scap3y    schedule 03.08.2019    source источник
comment
Есть ли способ получить кавычки внутри квадратной скобки или полностью удалить их? - Есть конечно. Разберите строку и извлеките нужную информацию.   -  person Jesper Juhl    schedule 03.08.2019


Ответы (1)


[] — это синтаксис YAML для последовательности; так что если вы пытаетесь написать

[ 1.7.3.nonRelease ]

то вы пытаетесь написать последовательность с одним элементом 1.7.3.nonRelease. Когда вы говорите yaml-cpp записать строку [ 1.7.3.nonRelease ], он замечает, что если бы он просто вставил текст напрямую, он был бы интерпретирован как список, поэтому он заключает строку в кавычки, чтобы предотвратить это.

Если вы действительно хотите написать список с одним элементом, то сделайте так:

config["hints"]["SoftwareRequirement"]["packages"][m_exeName]["version"][0] = versionID;
person Jesse Beder    schedule 03.08.2019
comment
Спасибо за быстрый ответ! К сожалению, результат был не таким, как я надеялся (см. мой обновленный вопрос). Ваше здоровье! - person scap3y; 03.08.2019
comment
На самом деле, это справедливо! Принято как ответ. - person scap3y; 03.08.2019