Ich habe eine yaml-cpp, die immer in eine std::string
konvertiert, und manchmal auch in etwas anderes. Wenn die Zeichenfolge beispielsweise "3.14"
lautet, wird sie auch in double
konvertiert. Ich würde zuerst versuchen, int
, dann double
, dann bool
, und wenn das nicht funktioniert, zu einem std::string
konvertieren. Okay, also lassen Sie uns Nest diese try
-catch
es:Multiplizieren verschachtelten Versuch-fangen
try {
const int a = node.as<int>();
std::cout << "int!" << a << std::endl;
} catch (YAML::BadConversion) {
try {
const double a = node.as<double>();
std::cout << "double!" << a << std::endl;
} catch (YAML::BadConversion) {
try {
const bool a = node.as<bool>();
std::cout << "bool!" << a << std::endl;
} catch (YAML::BadConversion) {
const std::string a = node.as<std::string>();
std::cout << "string!" << a << std::endl;
}
}
}
Hm, desto tiefer und tiefer Verschachtelung sagt mir, dass dies nicht der beste Weg, um diesen Code zu schreiben.
Haben Sie Vorschläge, wie Sie das Design hier verbessern können? Flaches Nisten wäre sicherlich ratsam.
nicht sicher, aber nur ein try {} und catch (...)? Dann überprüfe Exception durch eine Funktion ... Wie ExceptionStatement (Exception e). –