Re[2]: Templates
От: alpha21264 СССР  
Дата: 04.07.18 12:47
Оценка:
Здравствуйте, so5team, Вы писали:

S>Ну вот, схематически из совсем свежего:

S>
struct successful_result_t { ... };
S>struct failed_result_t { ... };

S>struct reply_t {
S>  request_id_t id_;
S>  worker_id_t worker_;
S>  std::variant<successful_result_t, failed_result_t> result_;

S>  template<typename Actual_Result>
S>  reply_t(request_id_t id, worker_id_t worker, Actual_Result && result)
S>    : id_{std::move(id)}, worker_{std::move(worker)}
S>    , result_{std::forward<Actual_Result>(result)}
S>  {}
S>};

S>Позволяет использовать один и тот же конструктор и для
S>
return reply_t{id, self, successful_result_t{...}};

S>и для
S>
return reply_t{id, self, failed_result_t{...}};

S>И останется таковым даже если список результатов расширится, например, когда добавятся overloaded_result_t, postponed_result_t и пр. Не говоря уже о том, что сам по себе std::variant и средства работы с ним -- это сплошная шаблонная магия.

S>Вы вместе с вашими матерыми C++ разработчиками вместо этого предлагаете что?


struct result_t
{
   bool successful ;
   ...
}


Не надо сочинять сущности без необходимости.
За это раньше жгли на костре.

Или даже так:
struct result_t { ... };

// в случае ошибки
throw -1 ; // тогда тебе просто не нужны данные failed_result_t


Течёт вода Кубань-реки куда велят большевики.
Отредактировано 04.07.2018 12:51 alpha21264 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.