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

Сообщение Re[2]: Перебрать все варианты от 18.12.2018 15:54

Изменено 18.12.2018 16:09 rg45

Re[2]: Перебрать все варианты
Здравствуйте, sergii.p, Вы писали:

SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.


А это уже вопрос крривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:

#pragma once

#include "cortesisian_product_detail.hpp"

template <typename...Ranges>
cortesian_product<Ranges> make_cortesian_product(Ranges&&...);


Ну и где-нибудь, в этом же файле, или отдельно, в документации, небольшой пример, как этим пользоваться:

for (const auto& entry : make_cortesian_product({ 32, 64}, { true, false}, { 8, 16, 32, 64 }))
{
  std::cout << "[" << entry.get<0>() << ", " << entry.get<1>() << ", " << entry.get<2>() << "]" << std::endl;
}


А больше ему ничего видеть и не нужно. И где здесь повод, чтобы стреляться? Это только в кривых руках и при путанице в голове сложность реализации автоматически означает сложность в использовании. Настоящие профессионалы же тем и отличаются, что умеют сложные вещи сделать простыми.
Re[2]: Перебрать все варианты
Здравствуйте, sergii.p, Вы писали:

SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.


А это уже вопрос кривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:

#pragma once

#include "cortesisian_product_detail.hpp"

template <typename...Ranges>
cortesian_product<Ranges> make_cortesian_product(Ranges&&...);


Ну и где-нибудь, в этом же файле, или отдельно, в документации, небольшой пример, как этим пользоваться:

for (const auto& entry : make_cortesian_product({ 32, 64}, { true, false}, { 8, 16, 32, 64 }))
{
  std::cout << "[" << entry.get<0>() << ", " << entry.get<1>() << ", " << entry.get<2>() << "]" << std::endl;
}


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