Здравствуйте, smeeld, Вы писали:
S>Заметил, что у большинства практикующих C++ достаточно негативное отношение к шаблонам в CPP.
Хорошо бы пруфов. И про негативное. И, в особенности, про большинство.
S>Это многими считается чуть ли не признаком недостатка квалификации, типа матёрый плюсовик всегда найдёт способ расписать без создания параметризованных типов, и вообще найдёт способ писать на C++ как можно проще.
Ну вот, схематически из совсем свежего:
struct successful_result_t { ... };
struct failed_result_t { ... };
struct reply_t {
request_id_t id_;
worker_id_t worker_;
std::variant<successful_result_t, failed_result_t> result_;
template<typename Actual_Result>
reply_t(request_id_t id, worker_id_t worker, Actual_Result && result)
: id_{std::move(id)}, worker_{std::move(worker)}
, result_{std::forward<Actual_Result>(result)}
{}
};
Позволяет использовать один и тот же конструктор и для
return reply_t{id, self, successful_result_t{...}};
и для
return reply_t{id, self, failed_result_t{...}};
И останется таковым даже если список результатов расширится, например, когда добавятся overloaded_result_t, postponed_result_t и пр. Не говоря уже о том, что сам по себе std::variant и средства работы с ним -- это сплошная шаблонная магия.
Вы вместе с вашими матерыми C++ разработчиками вместо этого предлагаете что?