Тестирование возвращаемого значения и возврата ⇐ C++
-
Anonymous
Тестирование возвращаемого значения и возврата
Может быть, это глупый вопрос, но я работаю над тем, существует ли краткий способ проверить возвращаемый функцией функцию результат и, если он не соответствует условию, вернуть это значение (т. е. передать его дальше).
Что касается возможного вопроса прямо сейчас: да, то, что я ищу, похоже на то, что предлагают исключения. Однако для разработчика встраиваемых систем накладные расходы, связанные с исключениями (к сожалению), слишком высоки.
Например,
Статус класса перечисления { ХОРОШО, ОШИБКА1, ОШИБКА2, ОШИБКА3 }; Статус foo1(); Статус foo2(); Статус foo3(); Статус бар() { Результат статуса; результат = foo1(); if (result != Status::OKAY) вернуть результат; результат = foo2(); if (result != Status::OKAY) вернуть результат; результат = foo3(); if (result != Status::OKAY) вернуть результат; вернуть Статус::ОКЕЙ; } Если бы я просто использовал логическое значение в качестве возвращаемого значения, сокращением было бы следующее:
bool bar() { if (!foo1()) вернет false; if (!foo2()) вернет false; if (!foo3()) возвращает false; вернуть истину; } Подобное предложение if с побочным эффектом считается запахом кода, но мне оно кажется более читабельным и кратким, чем назначение локальных переменных и тесты.
Есть ли сокращенный способ добиться такой же читабельности, как во втором примере, но с тем же эффектом, что и в первом примере?
Может быть, это глупый вопрос, но я работаю над тем, существует ли краткий способ проверить возвращаемый функцией функцию результат и, если он не соответствует условию, вернуть это значение (т. е. передать его дальше).
Что касается возможного вопроса прямо сейчас: да, то, что я ищу, похоже на то, что предлагают исключения. Однако для разработчика встраиваемых систем накладные расходы, связанные с исключениями (к сожалению), слишком высоки.
Например,
Статус класса перечисления { ХОРОШО, ОШИБКА1, ОШИБКА2, ОШИБКА3 }; Статус foo1(); Статус foo2(); Статус foo3(); Статус бар() { Результат статуса; результат = foo1(); if (result != Status::OKAY) вернуть результат; результат = foo2(); if (result != Status::OKAY) вернуть результат; результат = foo3(); if (result != Status::OKAY) вернуть результат; вернуть Статус::ОКЕЙ; } Если бы я просто использовал логическое значение в качестве возвращаемого значения, сокращением было бы следующее:
bool bar() { if (!foo1()) вернет false; if (!foo2()) вернет false; if (!foo3()) возвращает false; вернуть истину; } Подобное предложение if с побочным эффектом считается запахом кода, но мне оно кажется более читабельным и кратким, чем назначение локальных переменных и тесты.
Есть ли сокращенный способ добиться такой же читабельности, как во втором примере, но с тем же эффектом, что и в первом примере?
Мобильная версия