Revert "all necessary files were deleted"#2
Conversation
This reverts commit a87c6af.
AIGregor
left a comment
There was a problem hiding this comment.
Ясный, чистый код, разбитый по модулям, что радует. Присутствуют комментарии, за что плюс к карме :) Задание реализовано в полном объеме. Есть небольшие комментарии, которые описаны ниже.
| */ | ||
| namespace hw_utility | ||
| { | ||
| template<int index, typename Callback, typename... Args> |
There was a problem hiding this comment.
Хорошая мысль разбить весь проект по файлам и добавить части в свой namespace. Воспринимается гораздо легче, чем большая простыня на 2-3 экрана.
| template <typename TT> | ||
| auto print_ip(TT& input) -> decltype(std::get<0>(std::declval<TT>()), void()) | ||
| { | ||
| checkHomogeneity(input); |
There was a problem hiding this comment.
Понравилась компактная реализация проверки tuple на гомогенность . Может быть не стоило вызывать исключение, которое приведет к завершению программы, а возвращать true | false... хотя это зависит от тз.
| //base template | ||
| template<typename TT> | ||
| typename std::enable_if<std::is_integral<typename std::remove_reference<TT>::type>::value, void>::type | ||
| print_ip(TT& input) |
There was a problem hiding this comment.
Довольно часто встречающаяся реализация, я бы сказал прямой подход. Мне кажется через union как-то по приятнее :) и пусть компилятор сам разбивает его по байтам :))
| { | ||
| std::cout << *(input.begin()); | ||
| for(auto & element: input) { | ||
| std::cout << "."; |
There was a problem hiding this comment.
Хороший подход к выводу ip на экран... Действительно можно сначала печатать точку и потом число, предварительно напечатав первый элемент, но хорошо бы проверить что он там есть.
This reverts commit a87c6af.