Где именно исключения должны быть пойманы, чтобы получить полезную отчетность по ошибкам из этого сценария?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Где именно исключения должны быть пойманы, чтобы получить полезную отчетность по ошибкам из этого сценария?

Сообщение Anonymous »

Я думаю, что понимаю основы исключений: < /p>

[*] Если функция не может выполнить свою назначенную задачу, она может сигнализировать о нем, выбрасывая исключение, < /li>
При написании функции необходимо убедиться, что это исключение, т.е. Гарантия),
Если это актуально, напишите try / block на некотором уровне, чтобы обрабатывать исключение вместо того, чтобы он распространялся, пока оно не завершит приложение. и когда нужно быть каким -то ловким и переосмыслением. Чтобы быть конкретным, ниже приведен конкретный сценарий для работы. Как я могу получить полезную отчет о ошибках из этого сценария?

Код: Выделить всё

#include 
#include 

using RelevantInfo = std::map;

void parseConfField(RelevantInfo& info, JsonObject field)
{
// at() throws std::invalid_argument if it cannot find a subobject with the expected name
auto const name = field.at("name");
auto const value = field.at("value");

// The map throws std::bad_alloc if the system is out of memory
// as_double() throws std::invalid_argument if value is not convertible to double
info[name.as_string()] = value.as_double();
}

void parseConfFile(RelevantInfo& info, char const* fileName)
{
// open() throws std::invalid_argument if the file does not exist or does not have proper JSON syntax
auto const loadedConf = somelibrary::open(fileName);

// as_array() throws std::invalid_argument if loadedConf is not an array
for (auto const& confField : loadedConf.as_array())
{
parseConfField(info, confField);
}
}

void parseAllConf()
{
RelevantInfo info;
parseConfFile(info, "a.json");
parseConfFile(info, "b.json");
parseConfFile(info, "c.json");
}

Я не могу справиться с системой, находящейся вне памяти, но я мог бы (в качестве примера) справиться со всеми проблемами, связанными с файлом конфигурации в parseallconf () , рассказав пользователю, что не так, побуждая их исправить свои файлы конфигурации, а затем попытаться загрузить файлы. Просто добавление try / block in parseallconf () , кажется, недостаточно: я бы поймал std :: vingalid_argument во всех случаях, я не уверен, что хотел бы полагаться на вызов What () , чтобы отобразить сообщение для пользователя (что, если мне нужно отобразить его на другом языке?) 'value' ", но не сказал бы в том, в какой области, в каком файле была проблема

Подробнее здесь: https://stackoverflow.com/questions/796 ... g-from-thi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»