[英]Parsing yaml files with yaml-cpp
我在使用yaml-cpp
解析yaml
文件時遇到問題,我正在使用wxWidgets
制作應用程序,我正在嘗試從yaml
文件中讀取幀大小,看起來像,
---
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
這是應該處理解析的代碼,
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
*** Caught unhandled unknown exception; terminating
。
由於SizeH
和SizeW
是Window
的孩子,你的兩行應該看起來像
sizeH = config["Window"]["SizeH"].as<int>();
sizeW = config["Window"]["SizeW"].as<int>();
或者,與之前的檢查合並,
if (auto window = config["Window"]) {
sizeH = window["SizeH"].as<int>();
sizeW = window["SizeW"].as<int>();
} else {
wxLogDebug("Error! Cannot fetch values.");
}
通常,錯誤處理很糟糕。 在您的代碼中,如果遇到錯誤,未設置sizeH
和sizeW
但仍將其提供給SetSize
。 這是未定義的行為。 您應該使用一些默認值初始化它們,例如
int sizeH = 480, sizeW = 640;
此外,由於您讓我們this
是什么一無所知,因此可能存在其他錯誤。
嘗試這樣做來學習 yaml-cpp 很好,但如果你真的想保存/恢復你的框架幾何,你應該使用wxPersistentTLW代替。 要使用它,只需在創建框架后調用wxPersistentRegisterAndRestore(frame, "NameToIdentifyYourFrame")
,有關詳細信息,請參閱手冊。
在跨平台環境下最好保存window的客戶端大小,至於GTK重要的是客戶端大小。 在這種情況下,可能還有其他操作系統/工具包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.