首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用yaml-cpp解析yaml文件

用yaml-cpp解析yaml文件
EN

Stack Overflow用户
提问于 2021-02-01 04:36:07
回答 3查看 268关注 0票数 0

我在使用yaml-cpp解析yaml文件时遇到了问题,我正在使用wxWidgets开发一个应用程序,并尝试从yaml文件中读取帧大小,如下所示:

代码语言:javascript
复制
---
This is the configuration file for the Sample Browser,
feel free to edit this file as needed
...

Window:
  SizeW: 1280
  SizeH: 720
Media:
  Autoplay: false

这是应该处理解析的代码,

代码语言:javascript
复制
    int sizeH, sizeW;

    try
    {
        YAML::Node config = YAML::LoadFile("/home/apoorv/repos/cpp-projects/wxWidgets/SampleBrowser/build/config.yaml");

        if (!config["Window"])
        {
            wxLogDebug("Error! Cannot fetch values.");
        }

        sizeH = config["SizeH"].as<int>();
        sizeW = config["SizeW"].as<int>();
    }

    catch(const YAML::ParserException& ex)
    {
        std::cout << ex.what() << std::endl;
    }

    this->SetSize(sizeW, sizeH);

但是当我尝试解析这个文件并设置帧大小this->SetSize()时,它错误地显示为*** Caught unhandled unknown exception; terminating

EN

回答 3

Stack Overflow用户

发布于 2021-02-01 05:22:59

由于SizeHSizeWWindow的子代,因此您的两行代码应该如下所示

代码语言:javascript
复制
    sizeH = config["Window"]["SizeH"].as<int>();
    sizeW = config["Window"]["SizeW"].as<int>();

或者,与先前的检查合并,

代码语言:javascript
复制
    if (auto window = config["Window"]) {
        sizeH = window["SizeH"].as<int>();
        sizeW = window["SizeW"].as<int>();
    } else {
        wxLogDebug("Error! Cannot fetch values.");
    }

一般来说,错误处理是不好的。在您的代码中,如果遇到错误,则不会设置sizeHsizeW,但仍会将它们提供给SetSize。这是未定义的行为。你应该用一些默认值来初始化它们,例如

代码语言:javascript
复制
int sizeH = 480, sizeW = 640;

此外,由于您对this是什么一无所知,因此可能还会有其他错误。

票数 1
EN

Stack Overflow用户

发布于 2021-02-03 02:25:26

尝试这样做是为了学习yaml-cpp,但是如果你真的想保存/恢复你的框架几何图形,你应该使用wxPersistentTLW代替。要使用它,只需在创建框架后调用wxPersistentRegisterAndRestore(frame, "NameToIdentifyYourFrame"),请参阅the manual了解更多详细信息。

票数 1
EN

Stack Overflow用户

发布于 2021-02-01 05:45:41

在跨平台环境中,最好保存窗口的客户端大小,因为对于GTK来说,重要的是客户端大小。可能还有其他操作系统/工具包就是这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65983991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档