У меня есть yaml-cpp, который всегда преобразуется в std::string
, а иногда и во что-то другое. Например, если строка фактически равна "3.14"
, она также преобразуется в double
. Сначала я хотел бы попробовать int
, затем double
, затем bool
, и если это не сработает, конвертируйте в std::string
. Хорошо, так что давайте гнездятся эти try
- catch
эс:Умножьте вложенные try-catch
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, тем глубже и глубже вложенность говорит мне, что это не самый лучший способ, чтобы написать этот код.
Любые предложения по улучшению дизайна здесь? Конечно, было бы предложено плоское гнездование.
Не уверен, но только одна попытка {} и поймать (...)? Затем проверьте Exception с помощью функции ... Как ExceptionStatement (исключение e). –