也许我错过了解C++ Exceptions?

qri*_*kko 2 c++ xml error-handling exception

我试图围绕异常和更多我想他们能做什么,更重要的是他们应该和不应该做什么.

所以,我将举例说明我如何思考一个非常具体的问题,并希望人们能够保佑或抨击我所拥有的想法.

我正在读取xml文件的设置,所以我可能有设置,但也有特定设置可能不在那里的情况,这会产生一些麻烦和很多"点错误处理"或者叫什么,类型:(观察:这不是"真正的代码",而只是一些伪的东西,希望能说明我的观点).

if (xml.attribute("some_attrib")) {
    settingForSomeAttrib = xml.attribute("some_attrib")->value();
} else {
    settingForSomeAttrib = "some default value";
}
Run Code Online (Sandbox Code Playgroud)

所以这将给我带来一个或多或少的检查和任务 - 我想做的任何事情,这是不可取的.

然后我在思考,或许我可以完成所有操作,取出任何出错的地方并将其交给默认值,稍微尝试一下即可,任何无法解决的问题我们将事后处理.

引导我去 try/catch思考.

我当时在想,也许我可以尝试一下:

try {
    setting1 = xml.attribute("attr1")->value(); // throws some kind of "attr1" exception?
    setting2 = xml.attribute("attr2")->value(); // -||-                "attr2" exception?
} catch (???) {
    //go through the things which went wrong and set them settings straight!
}
Run Code Online (Sandbox Code Playgroud)

希望有某种意义,或者至少可以遵循我的思路.我觉得并不是真的如何使用异常.

我在想,我的问题有点像这样:

1)例外是否可以这样使用或者这只是一个坏主意?2)人们通常如何在C++中使用这些来获取在检查有效性方面并非臃肿的代码?

谢谢.

NPE*_*NPE 5

我肯定不会使用异常来处理仅仅是可选的设置.

相反,我会按照以下几点做一些事情:

string getString(const XML& xml, const string& attrib, const string& defaultAttrib) {
  if (xml.attribute(attrib)) {
    return xml.attribute(attrib)->value();
  } else {
    return defaultAttrib;
  }
}

...
setting1 = getString(xml, "attrib1", "attrib1_default");
... 
Run Code Online (Sandbox Code Playgroud)