Сообщение Re[2]: Перебрать все варианты от 18.12.2018 15:54
Изменено 18.12.2018 16:54 rg45
Re[2]: Перебрать все варианты
Здравствуйте, sergii.p, Вы писали:
SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.
А это уже вопрос кривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:
Ну и где-нибудь, в этом же файле, или отдельно, в документации, небольшой пример, как этим пользоваться:
А при поддержке компилятором structured binding declarations намного красивее:
А больше ему ничего видеть и не нужно. И где здесь повод, чтобы стреляться? Это только в кривых руках, и при путанице в голове, сложность реализации автоматически означает сложность в использовании. Настоящие профессионалы же тем и отличаются, что умеют сложные вещи сделать простыми.
SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.
А это уже вопрос кривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:
#pragma once
#include "cortesian_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;
}
А при поддержке компилятором structured binding declarations намного красивее:
for (const auto& [key, value, description] : make_cortesian_product({ 32, 64}, { true, false}, { 8, 16, 32, 64 }))
{
std::cout << "[" << key << ", " << value << ", " << description << "]" << std::endl;
}
А больше ему ничего видеть и не нужно. И где здесь повод, чтобы стреляться? Это только в кривых руках, и при путанице в голове, сложность реализации автоматически означает сложность в использовании. Настоящие профессионалы же тем и отличаются, что умеют сложные вещи сделать простыми.
Re[2]: Перебрать все варианты
Здравствуйте, sergii.p, Вы писали:
SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.
А это уже вопрос кривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:
Ну и где-нибудь, в этом же файле, или отдельно, в документации, небольшой пример, как этим пользоваться:
А при поддержке компилятором structured binding declarations намного красивее:
А больше ему ничего видеть и не нужно. И где здесь повод, чтобы стреляться? Это только в кривых руках, и при путанице в голове, сложность реализации автоматически означает сложность в использовании. Настоящие профессионалы же тем и отличаются, что умеют сложные вещи сделать простыми.
SP>а по моему, лесенка циклов читабельнее. Всё понятно — нужно буквально десять секунд, чтобы понять что происходит. Если же ввести что-то типа Variants, чужой человек зайдёт в файл variants.h и тут же застрелится.
А это уже вопрос кривизны рук исполнителя. Ну зайдет он в "cortesian_product.hpp", увидит что то типа такого:
#pragma once
#include "cortesian_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;
}
А при поддержке компилятором structured binding declarations намного красивее:
for (const auto& [key, value, description] : make_cortesian_product({ 32, 64}, { true, false}, { 8, 16, 32, 64 }))
{
std::cout << "[" << key << ", " << value << ", " << description << "]" << std::endl;
}
А больше ему ничего видеть и не нужно. И где здесь повод, чтобы стреляться? Это только в кривых руках, и при путанице в голове, сложность реализации автоматически означает сложность в использовании. Настоящие профессионалы же тем и отличаются, что умеют сложные вещи сделать простыми.