Информация об изменениях

Сообщение Re[2]: Templates от 04.07.2018 12:47

Изменено 04.07.2018 12:51 alpha21264

Re[2]: Templates
Здравствуйте, 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 ;
   ...
}


Не надо сочинять сущности без необходимости.
За это раньше жгли на костре.
Re[2]: Templates
Здравствуйте, 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