Как бы вы использовали ожидаемый <T> Александреску с пустыми функциями?

Поэтому я наткнулся на эту (ИМХО) очень хорошую идею использования составной структуры возвращаемого значения и исключения -Expected, Это преодолевает многие недостатки традиционных методов обработки ошибок (исключения, коды ошибок).

УвидетьАндрей Александрескуs talk (Систематическая обработка ошибок в C ++) а такжеего слайды.

Исключения и коды ошибок имеют в основном те же сценарии использования с функциями, которые возвращают что-то, и теми, которые нет.Expectedс другой стороны, похоже, что он предназначен только для функций, которые возвращают значения.

Итак, мои вопросы:

Кто-нибудь из вас пробовалExpected на практике?Как бы вы применили эту идиому к функциям, ничего не возвращающим (то есть к пустым функциям)?

Обновить:

Я думаю, я должен уточнить мой вопрос.Expected специализация имеет смысл, но яМеня больше интересует, как это будет использоваться - идиома последовательного использования. Сама реализация вторична (и проста).

Например, Александреску приводит этот пример (немного отредактированный):

string s = readline();
auto x = parseInt(s).get(); // throw on error
auto y = parseInt(s); // won’t throw
if (!y.valid()) {
    // ...
}

Этот код "чистый» таким образом, что это просто течет естественно. Нам нужна ценность - мы ее получаем. Однако сexpected нужно было бы перехватить возвращаемую переменную и выполнить с ней некоторую операцию (например,.throwIfError() или что-то), что не так элегантно. И, очевидно,.get() Безразлично»не имеет смысла с пустотой.

Итак, как бы выглядел ваш код, если бы у вас была другая функция, скажемtoUpper(s), который изменяет строку на месте и не имеет возвращаемого значения?

Ответы на вопрос(5)

Ваш ответ на вопрос