Рассмотрим функцию, которая обертывает какую-то другую функцию, но делает что-то после завернутого вызова.Как сохранить статически необязательное значение
template< typename ftor, typename ... args >
typename std::result_of< ftor(args ...) >::type
call_and_report(ftor && f, args && ... a) {
auto && ret{ f(std::forward<args>(a) ...) };
std::cout << "Done!\n";
return std::forward< typename std::result_of< ftor(args ...) >::type >
(ret);
}
Как расширить это на функции обертывания, которые возвращают void
? Легко добавить еще одну специализацию, но я ищу другой способ, который может быть идиоматичным.
Общая идея заключается в том, что может быть или не быть значение. Это похоже на время компиляции optional
.
@Nawaz: Да, неважно: -S –